我有一个date
列,我试图查询该列以仅返回每月最大的日期。
我目前所拥有的虽然很简单,却返回了我所寻找的99%。例如,如果我以升序列出该列,则第一个条目为2016-10-17
,范围最大为2017-10-06
。
要注意的一点是,数据中可能不会显示每个月的最后一天,因此我实际上只是想撤回任何现有月份中出现的“最大”日期。
我目前正在运行的查询看起来像
SELECT MAX(date_col)
FROM schema_name.table_name
WHERE <condition1>
AND <condition2>
GROUP BY EXTRACT (MONTH FROM date_col)
ORDER BY max;
这确实返回了我正在寻找的大部分内容-我实际上返回的是
"2016-11-30"
"2016-12-30"
"2017-01-31"
"2017-02-28"
"2017-03-31"
"2017-04-28"
"2017-05-31"
"2017-06-30"
"2017-07-31"
"2017-08-31"
"2017-09-29"
"2017-10-06"
的确是列中每个月存在的最大值。但是,结果集似乎未包含自2016年10月起的最大日期值(该列中前几个月的数据)。该月的列中有多个值,最大为2016-10-31
。
如果有人能指出为什么不返回本月的最大值,我将非常感激。
答案 0 :(得分:2)
您是按月份(1到12)而不是月份和年份分组。由于2017-10-06
比2016年10月的任何一天都大,所以这就是“十月”组的收益。
您应该
GROUP BY date_trunc('month', date_col)