【问题标题】:Extract highest date per month from a list of dates从日期列表中提取每月最高日期
【发布时间】:2018-10-10 00:04:18
【问题描述】:

我有一个 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

如果有人能指出为什么没有返回本月的最大值,我将不胜感激。

【问题讨论】:

  • 您仅按月分组,而不是按年和月分组。因此,由于存在“2017-10-06”值,因此大于“2016-10-nn”值。
  • 感谢@eurotrash 的回复。这样就解决了。

标签: postgresql


【解决方案1】:

您按月(1 到 12)而不是按月和年分组。由于2017-10-06 比 2016 年 10 月的任何一天都大,这就是“十月”组所得到的结果。

你应该

GROUP BY date_trunc('month', date_col)

【讨论】:

  • 是的,这就是问题所在。非常感谢您的及时回复。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-03-20
  • 2015-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多