gpt4 book ai didi

sql-server - 分组表问题

转载 作者:行者123 更新时间:2023-12-03 12:54:53 24 4
gpt4 key购买 nike

我的表有四个字段:IDDateBegDateEndRankIDRankID 值是 ID 字段在 DateBeg asc 上的排名。这是示例数据:

ID |RankID |  DateBeg    |  DateEnd  |
---|-------|--------------------------
1 | 1 |01-01-2016 |04-01-2016 |
1 | 2 |05-01-2016 |11-02-2016 |
1 | 3 |12-02-2016 |15-02-2016 |
1 | 4 |16-02-2016 |19-02-2016 |
1 | 5 |23-02-2016 |25-02-2016 |
4 | 2 |05-01-2016 |07-01-2016 |
4 | 3 |08-01-2016 |12-01-2016 |
5 | 1 |04-01-2016 |06-01-2016 |

现在,我想对 ID 记录进行分组,这些记录的 DateBeg 值比上一个排名记录 DateEnd 值晚 1 天(如果为 null,则必须包含它也)。此示例表的预期结果将是:

ID | Min(DateBeg)|Max(DateEnd)|
---|-------------|----------------
1 |01-01-2016 |19-02-2016 |
1 |23-02-2016 |25-02-2016 |
4 |05-01-2016 |12-01-2016 |
5 |04-01-2016 |06-01-2016 |

希望你能帮助我,在此先感谢。

最佳答案

像下面一样尝试。我假设您的 datebegDateend 是 uin 日期数据类型格式。否则需要转成日期数据类型进行比较。

SELECT ID,MIN(DATEBEG),MAX(DateEnd) FROM
(
SELECT ID,(DATEBEG),ROW_NUMBER()OVER(PARTITION BY ID ORDER BY ID) RNO,

(DateEND),CASE WHEN DATEBEG=LAG( DATEADD(DAY,1,[DateEnd]))
OVER(PARTITION BY ID ORDER BY ID)THEN 1 END NO
FROM #TABLE1
)A
GROUP BY ID,ISNULL(NO,RNO)
ORDER BY ID

更新:-试试下面。如果您的数据集中有唯一的 ud 和 rank id 组合,它将适用于所有场景,否则使用 row_number 并生成唯一的数字。

SELECT ID,MIN(DATEBEG),MAX(DATEEND) FROM 
(
SELECT ID,
RANKID,
datebeg,
DateEnd,
CASE
WHEN Dateadd(DAY, -1, datebeg) = Lag( DateEnd) OVER(PARTITION BY ID ORDER BY ID)
OR Dateadd(DAY, 1, dateEND) = LEAD( DateBeg) OVER(PARTITION BY ID ORDER BY ID)
THEN 1
ELSE 0
END NO
FROM #Table1
)A
GROUP BY ID,CASE WHEN NO=0 AND ID<>RANKID THEN RANKID ELSE NO END
ORDER BY ID

关于sql-server - 分组表问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40375494/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com