【发布时间】:2021-12-07 11:45:16
【问题描述】:
基本上我有以下来自查询的数据集,“rn”是一个分区,用于为下一个需求添加行号:
WITH dataset AS (...)
-- gives
business_id | amount | year | month | row_num
--------------------------------------------
1000 2000 2021 9 1
1000 1000 2021 9 2
1000 1500 2021 8 3
1000 1000 2020 9 4
1000 1000 2020 8 5
1043 4000 2021 8 1
1043 4500 2021 7 2
1043 4000 2021 6 3
1043 4100 2021 5 4
1043 4200 2021 4 5
1043 5000 2020 12 6
1043 5500 2020 11 7
1043 5600 2020 10 8
1043 5100 2020 9 9
1043 5300 2020 8 10
1043 5100 2020 7 11
1043 5000 2020 6 12
1139 4000 2021 9 1
1139 3000 2021 8 2
1139 2000 2021 7 3
1139 1000 2020 6 4
我的第一个要求是获取每个业务的最新年/月值,我可以通过选择rn = 1 来做到这一点,如下所示:
WITH dataset AS (...)
SELECT * FROM dataset WHERE row_num = 1
-- gives
business_id | amount | year | month | row_num
-----------------------------------------------
1000 2000 2021 9 1
1043 4000 2021 8 1
1139 4000 2021 9 1
到目前为止一切顺利,我不知道该怎么做的第二个要求是从去年获得相同的记录来比较当前年份,所以我需要这个数据集:
business_id | amount | year | month | row_num
-----------------------------------------------
1000 2000 2021 9 1
1000 1000 2020 9 4
1043 4000 2021 8 1
1043 5300 2020 8 10
1139 4000 2021 9 1
任何想法如何做到这一点?请注意,最后一条记录没有 2020 年的值,这也是一种情况。
【问题讨论】:
标签: sql postgresql greatest-n-per-group common-table-expression