Luk*_*uke 24 sql t-sql sql-server sql-server-2005 gaps-and-islands
我知道一些基本的sql,但这个超出了我.我看起来高低但没有骰子.我需要查看以下数据,我可以在应用程序层代码中执行此操作.但不幸的是,对于这个特定的代码,代码必须放在数据层中.
我正在使用T-SQL.
表
Date Crew DayType
01-02-11 John Doe SEA
02-02-11 John Doe SEA
03-02-11 John Doe SEA
04-02-11 John Doe HOME
05-02-11 John Doe HOME
06-02-11 John Doe SEA
Run Code Online (Sandbox Code Playgroud)
我需要这样的观点
DateFrom DateTo Name DayType
01-02-11 03-02-11 John Doe SEA
04-02-11 05-02-11 John Doe HOME
06-02-11 06-02-11 John Doe SEA
Run Code Online (Sandbox Code Playgroud)
不幸的是,应用层需要基表格格式为show.这可以在查询中做到吗?
谢谢
卢克
Qua*_*noi 29
WITH q AS
(
SELECT *,
ROW_NUMBER() OVER (PARTITION BY crew, dayType ORDER BY [date]) AS rnd,
ROW_NUMBER() OVER (PARTITION BY crew ORDER BY [date]) AS rn
FROM mytable
)
SELECT MIN([date]), MAX([date]), crew AS name, dayType
FROM q
GROUP BY
crew, dayType, rnd - rn
Run Code Online (Sandbox Code Playgroud)
您可能会对本文感兴趣:
And*_*y M 13
WITH grouped AS (
SELECT
*,
grp = DATEDIFF(day, 0, Date) -
ROW_NUMBER() OVER (PARTITION BY Crew, DayType ORDER BY Date)
FROM @testtable
)
SELECT
DateFrom = MIN(Date),
DateTo = MAX(Date),
Name = Crew,
DayType
FROM grouped
GROUP BY Crew, DayType, grp;
Run Code Online (Sandbox Code Playgroud)
基本上,与Quassnoi的解决方案相同,但ROW_NUMBER少用一个产生更好的执行计划.
| 归档时间: |
|
| 查看次数: |
10349 次 |
| 最近记录: |