我的GROUP BY查询遇到了麻烦(至少对我来说这是最棘手的)。
我想要做的是检索按其他列分组的最新修改记录。我看到的问题是,分组返回它找到的唯一第一条记录(在组中)而不管ORDER BY(返回最终结果时除外)。
以下是我的代码的简化版本。
SELECT events.id, events.name, events.type, events.modified_time
FROM events
GROUP BY events.type
ORDER BY event.modified_time DESC
将返回:
1 | Event One | Birthday | Jan 1, 2012
2 | Event Two | Graduation | Jan 1, 2012
事实上,第三条记录的修改时间稍晚:
3 | Event Three | Birthday | Jan 2, 2012
我尝试过使用MAX的HAVING子句(modified_time),但它也没有返回正确的结果。也许我只需要与知识渊博的人讨论这个问题,但如果这个问题有足够的意义,你可以告诉我需要什么,那么也许有一个简单的答案。
奖励问题:答案 0 :(得分:1)
GROUP BY / HAVING不是你想要的。你想要的是:
WHERE
events.modified_time = ( select max(modified_time) from events e2 where e2.type = events.type )
...或者像蒂姆这样的解决方案与使用像ROW_NUMBER
这样的分析函数相关联答案 1 :(得分:1)
在许多其他方法中,这可能适合您:
SELECT a.id, a.name, a.[type], a.modified_time
FROM [events] AS a
JOIN (
SELECT MAX([events].id) AS id, [events].[type]
FROM [events]
GROUP BY [events].[type]
) AS b ON a.id = b.id AND a.[type] = b.[type]
ORDER BY a.modified_time DESC