用于'ftatten'报表数据的 SQL Server 查询



假设我有一个表,具有以下结构的以下数据。我正在尝试查询数据,以查找某人(员工(工作的日期范围。

NAME     WORKED        DATE   
Bob       YES         1/1/2019
Bob       YES         1/2/2019
Bob       YES         1/3/2019
Bob       NO          1/4/2019
Bob       YES         1/5/2019
Bob       YES         1/6/2019
Bob       NO          1/7/2019
Jane      Yes         1/1/2019
Jane      Yes         1/2/2019
Jame      No          1/3/2019

预期结果:(我需要的结果(

Bob 1/1/2019 - 1/3/2019
Bob 1/5/2019 - 1/6/2019
Jane 1/1/2019 - 1/2/2019

返回此结果集的查询的SQL语法(SQL Server 2008+(是什么
thx提前

这是一个缺口和孤岛问题。您可以使用row_number()和一些日期运算来识别这些行。

所以,假设你每个日期都有一行:

select name, min(date), max(date)
from (select t.*,
row_number() over (partition by name order by date) as seqnum
from t
where worked = 'YES'
) t
group by name,
dateadd(day, - seqnum, date);

为什么这样做?您正在查找相邻的日期。如果从日期中减去一个序列,那么结果是恒定的——当日期是连续的时。此观察结果在group by中用于获取所需的组。

最新更新