SQL Server查询到';ftatten&x27;用于报告的数据

SQL Server查询到';ftatten&x27;用于报告的数据,sql,sql-server,Sql,Sql Server,假设我有一个包含以下数据的表,结构如下。我试图查询数据,以查找某人(员工)工作的日期范围 预期结果:(我需要的结果) 返回此结果集的查询的SQL语法(SQL Server 2008+)是什么? thx提前这是一个缺口和孤岛问题。您可以使用row\u number()和一些日期算法来识别行 因此,假设每个日期都有一行: select name, min(date), max(date) from (select t.*, row_number() over (partit

假设我有一个包含以下数据的表,结构如下。我试图查询数据,以查找某人(员工)工作的日期范围

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

返回此结果集的查询的SQL语法(SQL Server 2008+)是什么?

thx提前

这是一个缺口和孤岛问题。您可以使用
row\u 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);

为什么这样做有效?您正在寻找相邻的日期。如果从日期中减去一个序列,那么结果是恒定的——当日期是连续的。这一观察结果在
分组中使用,通过
获得您想要的分组。

这是一个缺口和孤岛问题。您可以使用
row\u 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);

为什么这样做有效?您正在寻找相邻的日期。如果从日期中减去一个序列,那么结果是恒定的——当日期是连续的。这一观察结果被用在
分组中,通过
获得你想要的分组。

这是一个缺口和孤岛问题,关于如何做到这一点,这里有100个例子。你看过哪些问题,哪些问题你不明白?您尝试过什么,为什么不起作用?而且,2008+的语法非常广泛。2008(R2)现在完全不受支持,并且在2012+中添加了许多新功能。你最好告诉我们你实际使用的版本。这是一个空白和孤岛问题,这里有100个关于如何做到这一点的例子。你看过哪些问题,哪些问题你不明白?您尝试过什么,为什么不起作用?而且,2008+的语法非常广泛。2008(R2)现在完全不受支持,并且在2012+中添加了许多新功能。您最好告诉我们您实际使用的版本。
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);