从表中选择具有最大日期的行
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
【讨论】:
以上是关于从表中选择具有最大日期的行的主要内容,如果未能解决你的问题,请参考以下文章