SQL Server查询到';ftatten&x27;用于报告的数据
假设我有一个包含以下数据的表,结构如下。我试图查询数据,以查找某人(员工)工作的日期范围 预期结果:(我需要的结果) 返回此结果集的查询的SQL语法(SQL Server 2008+)是什么?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
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);