从表中选择具有最大日期的行

Posted

技术标签:

【中文标题】从表中选择具有最大日期的行【英文标题】:Select rows with max date from table 【发布时间】:2021-10-09 16:17:15 【问题描述】:

我有这样的table,需要表 2 的结果。我正在尝试选择最大日期按 project_id 分组并按 id 排序的行。并且结果表必须有 id 列。尝试了这样的请求:

SELECT MAX(charges.id) as id, 
       "charges"."profile_id", MAX(failed_at) AS failed_at 
FROM "charges" 
GROUP BY "charges"."profile_id" 
ORDER BY "charges"."id" ASC

并且有错误:

错误:列“charges.id”必须出现在 GROUP BY 子句中或用于聚合函数中)

示例表

id profile_id failed_at
1 1 01.01.2021
2 1 01.02.2021
3 1 01.03.2021
4 2 01.06.2021
5 2 01.05.2021
6 2 01.04.2021

需要的结果

id profile_id failed_at
3 1 01.03.2021
4 2 01.06.2021

【问题讨论】:

能否提供更多信息,根据给出的错误,它不应该出现,因为 max(charges.id) 已经被使用,这是一个聚合功能。 问题是ORDER BY "charges"."id"。不确定您要查找的结果,但ORDER BY max("charges"."id") 至少可以完成查询。如果这不是您想要的输出,则提供显示起始数据和您想要输出的示例数据。添加为您的问题的更新。 感谢 cmets,您可以在附加的 img 中查看表格和输出示例。 i.stack.imgur.com/ZKmUS.png 请勿将文本数据作为图像发布,请参阅此处Images。将数据作为文本复制并粘贴到您的问题中。 【参考方案1】:
SELECT charges.*
FROM charges
INNER JOIN 
( 
    SELECT
        profile_id,
        MAX(charges.failed_at) AS MaxFailed_at
    FROM charges
    GROUP BY profile_id
) AS xQ ON charges.profile_id = xQ.profile_id AND charges.failed_at = xQ.MaxFailed_at   

【讨论】:

以上是关于从表中选择具有最大日期的行的主要内容,如果未能解决你的问题,请参考以下文章

用于从表中选择具有最新时间戳的行的 JOOQ 代码

SQL选择具有最大和最小日期的行

Mysql按日期时间的日期部分分组,并为每个日期选择具有最大日期时间的行

从每组中的 3 个表中选择 sql 中具有最新日期的行

从行具有最大日期的表中选择信息

根据日期参数从表中选择周末或工作日数据