我有一个包含几列(其中有poc_id, user, rw
列)的表,并且我正在try 执行一个查询,该查询将返回我:
-
返回上个月的"Points"总和的值的列,按月份、用户和ID_REW分组.如果上个月没有值,则返回NULL
-
相同,但来自go 年同月
这将是输出(输入是不包含PREV_MONTH
和PREV_YEAR
列的同一个表,具有与我要查找的内容无关的另一列,我可以忽略它们):
USER | ID_REW | POINTS | POC | DATE | PREV_MONTH | PREV_YEAR |
---|---|---|---|---|---|---|
1 | 1635798105611 | 10 | 1 | 01/01/2021 | null | null |
1 | 1635798105611 | 20 | 1 | 25/01/2021 | null | null |
1 | 1635798105611 | 10 | 1 | 05/02/2021 | 30 | null |
1 | 1635798105611 | 15 | 1 | 20/02/2022 | null | 10 |
2 | 1641209778245 | 50 | 2 | 03/02/2021 | null | null |
2 | 1654058198065 | 60 | 2 | 15/05/2021 | null | null |
2 | 1654065920033 | 15 | 2 | 25/02/2022 | null | null |
2 | 1654051152555 | 10 | 4 | 26/02/2022 | null | null |
2 | 1654051152555 | 5 | 4 | 15/02/2023 | null | 10 |
2 | 1635798105611 | 25 | 4 | 25/02/2023 | null | null |
或者:
INSERT INTO my_table (USER, ID_REW, POINTS, POC, _DATE_, PREV_MONTH, PREV_YEAR)
VALUES
(1, 1635798105611, 10, 1, '2021-01-01', NULL, NULL),
(1, 1635798105611, 20, 1, '2021-01-25', NULL, NULL),
(1, 1635798105611, 10, 1, '2021-02-05', 30, NULL),
(1, 1635798105611, 15, 1, '2021-02-20', NULL, 10),
(2, 1641209778245, 50, 2, '2021-02-03', NULL, NULL),
(2, 1654058198065, 60, 2, '2021-05-15', NULL, NULL),
(2, 1654065920033, 15, 2, '2022-02-25', NULL, NULL),
(2, 1654051152555, 10, 4, '2022-02-26', NULL, NULL),
(2, 1654051152555, 5, 4, '2023-02-15', NULL, 10),
(2, 1635798105611, 25, 4, '2023-02-25', NULL, NULL);
我try 了类似如下的查询:
WITH cte as
(
SELECT
my columns...,
...,
....,
date_buy::date AS _DATE_,
SUM(POINTS) OVER (PARTITION BY user, id_rew, poc) AS _sum_,
year(_DATE_)*100 + month(_DATE_) AS ym
FROM
etc...
)
SELECT
USER,
ID_REW,
POINTS,
POC,
_DATE_,
LAG(_sum_) OVER (PARTITION BY user, id_rew, poc ORDER BY ym) AS PREV_MONTH,
LAG(_sum_, 12) OVER (PARTITION BY user, id_rew, poc ORDER BY ym) AS PREV_YEAR
FROM
cte
GROUP BY
1, 2, 3, 4, 5;
但我有几个错误,例如,在年-月202205到202203中,它返回值202203,而它应该返回NULL(因为在202204中没有购买)
我已经try 了一些我在互联网上看到的东西(我在那里了解到滞后函数的存在),也使用了一些变量,但到目前为止,试图复制我所看到的东西还没有成功.欢迎任何帮助