提问人:danilchik22 提问时间:6/19/2023 最后编辑:Isolateddanilchik22 更新时间:6/19/2023 访问量:39
sql 中查询的聚合
Aggregation of query in sql
问:
我有表格,比如:
同上 | 帐户 | 日期 | 量 |
---|---|---|---|
1. | ad@ind | 07.11.2022 | 354 |
2. | ad@ind | 10.11.2022 | 586 |
我需要找到记录,其中是最大月数并获取此日期的金额。它是怎么做的?Max(date) 不合适,我需要月内的数字。
我试着按日期和金额分组,我试着做内部查询,但运气不好。
答:
1赞
JNevill
6/19/2023
#1
假设您想要每个月的记录,那么请考虑使用窗口函数的以下解决方案:ROW_NUMBER()
SELECT id, account, date, amount
FROM
(
SELECT yt.*,
ROW_NUMBER() OVER (PARTITION BY EXTRACT(YEAR FROM date), EXTRACT(MONTH FROM date) ORDER BY date DESC) as rn
FROM yourtable yt
)dt
WHERE rn = 1;
此窗口功能功能为共享相同月份和年份的每一行生成一个row_number,从 1 开始,按列降序排序。获取的记录是该月/年组合的最高日期。ROW_NUMBER()
date
rn
1
使用与我在评论中分享的类似的逻辑,由于需要两次表扫描,因此可能会较慢:
SELECT *
FROM yourtable yt
WHERE date =
(
SELECT max(date)
FROM yourtable yt2
WHERE
EXTRACT(MONTH FROM yt.date) = EXTRACT(MONTH FROM yt2.date
AND EXTRACT(YEAR FROM yt.date) = EXTRACT YEAR FROM yt2.date)
)
评论
0赞
danilchik22
6/20/2023
谢谢,我对窗口功能一无所知。但是您的代码只获得一个帐户。
评论
SELECT * FROM yourtable WHERE date = (SELECT max(date) FROM yourtable)
extract(month from date)
07.11.2022