假设我有一个具有以下数据的表,结构如下。我正在尝试查询数据以查找某人(雇员)工作的日期范围。
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+)是什么?提前谢谢
这是一个孤岛问题。您可以使用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);