You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 15:55:14