Sql Query使用单个日期列创建日期范围

时间:2010-11-18 08:09:15

标签: sql-server-2005

我有一个包含单个日期列的表说特殊日期(存储为yyyymmdd)

如何在小的行子集中创建日期范围?

示例表包含一个日期列,其值为01-jan-2010,01-feb-2010,01-mar-2010

我需要

01-jan-2010 - 01-feb-2010
01-feb-2010 - 01-mar-2010

.... ....

请帮忙。

1 个答案:

答案 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

您可以使用

来避免使用CTE
SELECT  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

但我不明白你为什么要这样做。