Könnte das sein, was Sie meinen? (Ich bin damit einverstanden, haben Sie Ihre Frage deutlicher formuliert könnte, aber manchmal scheint es unsere Aufgabe zu sein, auch Sinn für kryptischen Fragen zu machen ...)
WITH
input(f_no,f_date,f_weight) AS (
SELECT 42,'2017-01-01',30
UNION ALL SELECT 42,'2017-01-01',30
UNION ALL SELECT 42,'2017-01-02',25
UNION ALL SELECT 42,'2017-01-02',25
UNION ALL SELECT 42,'2017-01-03',20
UNION ALL SELECT 42,'2017-01-03',20
UNION ALL SELECT 42,'2017-01-04',15
UNION ALL SELECT 42,'2017-01-04',15
UNION ALL SELECT 42,'2017-01-05',10
UNION ALL SELECT 42,'2017-01-05',10
UNION ALL SELECT 42,'2017-01-06', 5
UNION ALL SELECT 42,'2017-01-06', 5
)
,
as_vertical AS (
SELECT DISTINCT
f_no
, f_date
, SUM(f_weight) OVER(PARTITION BY f_no,f_date) AS weight_sum
FROM input
)
-- now as pivot ...
SELECT
f_no
, f_date
, weight_sum
, LAG(f_date ,1) OVER(PARTITION BY f_no ORDER BY f_date) AS f_date_1
, LAG(weight_sum,1) OVER(PARTITION BY f_no ORDER BY f_date) AS weight_sum_1
, LAG(f_date ,2) OVER(PARTITION BY f_no ORDER BY f_date) AS f_date_2
, LAG(weight_sum,2) OVER(PARTITION BY f_no ORDER BY f_date) AS weight_sum_2
FROM as_vertical;
f_no|f_date |weight_sum|f_date_1 |weight_sum_1|f_date_2 |weight_sum_2
42|2017-01-01| 60|(null) |(null) |(null) |(null)
42|2017-01-02| 50|2017-01-01| 60|(null) |(null)
42|2017-01-03| 40|2017-01-02| 50|2017-01-01| 60
42|2017-01-04| 30|2017-01-03| 40|2017-01-02| 50
42|2017-01-05| 20|2017-01-04| 30|2017-01-03| 40
42|2017-01-06| 10|2017-01-05| 20|2017-01-04| 30
Ich sollte hinzufügen: Sie können dies tun, in Vertica, weil es unterstützt OLAP-Funktionen (LAG()
und SUM() OVER()
). MySql nicht der Fall, ich habe Angst ...
Siehe https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me -eine-sehr-einfache-SQL-Abfrage sein – Strawberry