我有一个包含单个日期列的表说特殊日期(存储为yyyymmdd)
如何在小的行子集中创建日期范围?
示例表包含一个日期列,其值为01-jan-2010,01-feb-2010,01-mar-2010
我需要
01-jan-2010 - 01-feb-2010
01-feb-2010 - 01-mar-2010
.... ....
请帮忙。
答案 0 :(得分:2)
您可以尝试类似
的内容DECLARE @Table TABLE(
DateVal DATETIME
)
INSERT INTO @Table SELECT '01 Jan 2010'
INSERT INTO @Table SELECT '01 Feb 2010'
INSERT INTO @Table SELECT '01 Mar 2010'
;WITH DateVals AS (
SELECT *,
ROW_NUMBER() OVER(ORDER BY DateVal) RowID
FROM @Table
)
SELECT s.DateVal StartDate,
e.DateVal EndDate
FROM DateVals s INNER JOIN
DateVals e ON s.RowID + 1 = e.RowID
输出
StartDate EndDate
2010-01-01 00:00:00.000 2010-02-01 00:00:00.000
2010-02-01 00:00:00.000 2010-03-01 00:00:00.000
您可以使用
来避免使用CTESELECT s.DateVal StartDate,
MIN(e.DateVal) EndDate
FROM @Table s LEFT JOIN
@Table e ON s.DateVal < e.DateVal
GROUP BY s.DateVal
HAVING MIN(e.DateVal) IS NOT NULL
但我不明白你为什么要这样做。