我有一个以日期、引用号和视图为列的sql表,我正试图根据引用号分组的日期为每行添加视图。
我有3天的数据,比如3月27日、28日和29日,我有多个参考号,但我们取一个参考号:123。我想将该引用的视图数从27添加到28,并在28的同一行中生成一个新列。然后将从28到29视图中得到的数字相加,并将其放入29视图的同一行中的新列中。
create or replace view acq.vw_cumulative(DATE, REF, VIEWS, URL, CUML_VIEWS)
as
SELECT DATE, REF, VIEWS, URL, sum(VIEWS) WHERE DATE > DATE - 1 OVER (PARTITION BY REF) FROM ACQ.CUMULATIVE;
这是我刚开始的内容,但它只是返回总和并附加到所有3行
所以使用这个CTE只是为了简单起见(对我来说(;"伪造数据";
WITH data_table(date, ref, views) as (
SELECT * FROM VALUES
('2022-03-27'::date, 123, 100),
('2022-03-28'::date, 123, 20),
('2022-03-29'::date, 123, 3),
('2022-03-27'::date, 44, 10),
('2022-03-28'::date, 44, 200),
('2022-03-29'::date, 44, 32)
)
可以使用下面的SQL,基本上你需要做一点不同的SUM。
SELECT d.date,
d.ref,
d.views,
SUM(d.views) OVER (partition by d.ref order by d.date) as CUMULATIVE
FROM data_table AS d
order by 2,1;
我们将得到所有先前视图值的总和。
DATE | 参考 | 视图累积 | ||
---|---|---|---|---|
2022-03-27 | 44 | 10 | ||
2022-03-28 | 44 | 200 | 210 | |
2022-03-29 | 44 | 32 | 242 | |
2022-03-27 | 123 | 100 | 100||
2022-03-28 | 123 | 20 | 120 | |
2022-03-29 | 123 | 3<123>