t-sql从按其他列分组的日期平面列表中汇总日期范围
假设我有下表:t-sql从按其他列分组的日期平面列表中汇总日期范围,sql,tsql,sql-server-2008-r2,Sql,Tsql,Sql Server 2008 R2,假设我有下表: UserId AttributeId DateStart 1 3 1/1/2020 1 4 1/9/2020 1 3 2/2/2020 2 3 3/5/2020 2 3 4/1/2020 2 3 5/1/2020 对于每个唯一的UserId/At
UserId AttributeId DateStart
1 3 1/1/2020
1 4 1/9/2020
1 3 2/2/2020
2 3 3/5/2020
2 3 4/1/2020
2 3 5/1/2020
对于每个唯一的UserId/AttributeId对,假定DateEnd是该对的下一个DateStart的前一天,否则它为null,或者是一些默认值,比如说在未来的12/31/3000
将此操作应用于上表将产生:
UserId AttributeId DateStart DateEnd
1 3 1/1/2020 2/1/2020
1 4 1/9/2020 <null>
1 3 2/2/2020 <null>
2 3 3/5/2020 3/31/2020
2 3 4/1/2020 4/30/2020
2 3 5/1/2020 <null>
在SQL Server 2008 R2中执行的哪个T-SQL可以实现这一点?您正在描述的lead:
我已更改查询
请试试这个:
SELECT
UserId,AttributeId,DateStart,Min(DateEnd)DateEnd
FROM
(
SELECT X.UserId,X.AttributeId,X.DateStart, DATEADD(DD,-1,Y.DateStart) DateEnd
FROM TAB X LEFT JOIN TAB Y
ON (X.UserId=Y.UserId) AND (X.AttributeId=Y.AttributeId)
AND (X.DateStart<Y.DateStart)
)
T
GROUP BY UserId,AttributeId,DateStart
ORDER BY DateStart
抱歉…我应该声明我需要这个在SQL 2008 R2中工作!为什么要使用不受支持的SQL Server版本?非常感谢您发布的答案!我认为如果同一个UserId/AttributeId组合在表中有3个或更多的条目,那么这将不起作用。我修改了我的问题来展示一个例子——请看最后一行是新的。我已经更改了查询,请检查它的FUN28,告诉我,你尝试过查询吗?
SELECT
UserId,AttributeId,DateStart,Min(DateEnd)DateEnd
FROM
(
SELECT X.UserId,X.AttributeId,X.DateStart, DATEADD(DD,-1,Y.DateStart) DateEnd
FROM TAB X LEFT JOIN TAB Y
ON (X.UserId=Y.UserId) AND (X.AttributeId=Y.AttributeId)
AND (X.DateStart<Y.DateStart)
)
T
GROUP BY UserId,AttributeId,DateStart
ORDER BY DateStart