使用 group by 获取最新的日期记录

Posted

技术标签:

【中文标题】使用 group by 获取最新的日期记录【英文标题】:Fetch latest date records with group by 【发布时间】:2020-12-19 11:00:50 【问题描述】:

我正在尝试获取具有唯一 report_ids (col_1_0_) 的最新记录的记录。 可能按 col_1_0_ 分组,并使用此列 col_10_0_ 时间戳获取该组记录的最新。

我试图搜索这个论坛以找到方法,但它对我不起作用。如果有人帮助我找到类似的线程或帮助获得结果,将会很有帮助。

col_1_0_|ppi_event_id|col_2_0_                  |col_10_0_              |
--------|------------|--------------------------|-----------------------|
  149056|        3249|Draft                     |2020-08-25 13:01:49.016|
  149056|        3249|Submitted                 | 2020-08-25 13:10:22.01|
  149056|        3249|Submitted to administrator|2020-08-25 13:12:39.367|
  149056|        3249|Validated                 |2020-08-25 13:13:28.879|
  149060|        3249|Submitted to administrator|2020-08-25 13:32:41.924|

预期的结果是

col_1_0_|ppi_event_id|col_2_0_                  |col_10_0_              |
--------|------------|--------------------------|-----------------------|
  149056|        3249|Validated                 |2020-08-25 13:13:28.879|
  149060|        3249|Submitted to administrator|2020-08-25 13:32:41.924|

任何人都可以在这方面提供帮助。 更新:我已经尝试过下面提到的解决方案,但有时它会显示第一条记录“草稿”而不是“已验证” 还有其他选择吗?

【问题讨论】:

【参考方案1】:

在 Postgres 中,我建议使用 distinct on:这是对 SQL 标准的一个很好的扩展,完全符合您描述的目的。

select distinct on (col_1_0) t.*
from mytable t
order by col_1_0, col_10_0_ desc

【讨论】:

感谢它的工作。是否可以同时添加计数列,以便我可以将所有结果的计数作为结果中的一列查看?【参考方案2】:

传统的SQL格式是使用row_number()

Demo

SELECT * FROM (
SELECT A.*, 
  ROW_NUMBER() OVER( PARTITION BY col_1_0_ ORDER BY col_10_0_) AS RN
FROM TABLE1 A ) X WHERE RN = 1;

【讨论】:

以上是关于使用 group by 获取最新的日期记录的主要内容,如果未能解决你的问题,请参考以下文章

SQL - 使用 GROUP BY 获取子查询子集中或连接中的最新记录

php mysql Group By获取最新记录,而不是第一条记录

获取group by platform和semver的两条最新记录

具有最新记录的 Oracle 查询 GROUP BY [重复]

无需手动键入所有列即可从 group by 中获取一条记录

group by查询每组时间最新的一条记录