SQL分组查询问题:同一ID下取dtStart最小值与dtEnd最大值
问题解决办法
你的核心问题出在GROUP BY子句的字段选择上:原语句里把dtStart和dtEnd也加入了分组条件,这会导致同一个id下,只要dtStart或dtEnd不同,就会被拆分成不同的分组,自然无法合并成一行。
要实现同一id仅显示一行、取最小dtStart和最大dtEnd的需求,只需要将GROUP BY的字段限制为id即可,具体SQL如下:
SELECT TOP 100 id, MIN(dtStart) AS dtStart, MAX(dtEnd) AS dtEnd FROM T_registable WHERE sup_id = 3356 GROUP BY id
补充说明
如果之前尝试PARTITION BY没得到预期结果,可能是窗口函数的用法有误。这里也提供一种窗口函数的实现方式(虽然GROUP BY写法更简洁):
WITH GroupedData AS ( SELECT id, MIN(dtStart) OVER (PARTITION BY id) AS min_dtStart, MAX(dtEnd) OVER (PARTITION BY id) AS max_dtEnd FROM T_registable WHERE sup_id = 3356 ) SELECT DISTINCT id, min_dtStart AS dtStart, max_dtEnd AS dtEnd FROM GroupedData ORDER BY id LIMIT 100; -- 不同数据库TOP写法有差异,比如MySQL用LIMIT,SQL Server用TOP
内容的提问来源于stack exchange,提问作者Pervenc
相关产品推荐
相关产品推荐

