我在sql中的表中有一组日期。我想返回日期范围,我需要帮助。
所以,如果我有这样的日期
PK - Date
160 - 2013-04-16 12:09:00
160 - 2013-04-17 11:07:00
162 - 2013-04-16 12:10:00
160 - 2013-04-20 12:10:00
我想要例如
PK - beg - end
160 - 2013-04-16 12:09:00 - 2013-04-17 11:07:00
160 - 2013-04-17 11:07:00 - 2013-04-20 12:10:00
162 - 2013-04-16 12:10:00 - 2013-04-16 12:10:00
你能帮我吗?
谢谢
我正在使用Microsoft SQL Server Management Studio 10.0.1600.22
答案 0 :(得分:1)
以下是使用MS SQL Server 2008的示例(尽管应该适用于2005 +):
WITH CTE AS
(
SELECT RowNum = ROW_NUMBER() OVER (PARTITION BY PK ORDER BY Date ASC), *
FROM Dates
)
SELECT
A.PK, A.Date [beg], COALESCE(B.Date, A.Date) [end]
FROM
CTE A
LEFT JOIN CTE B
ON B.PK = A.PK AND B.RowNum = A.RowNum + 1
WHERE
B.RowNum IS NOT NULL OR A.RowNum = 1
这将获得每个PK的行号,然后提供表和它自身之间的连接,过滤掉任何没有匹配的行,除非它们是该PK的第一行。
这是表格:
CREATE TABLE Dates (PK INT, Date DATETIME)
INSERT INTO Dates VALUES
(160, '2013-04-16 12:09:00'),
(160, '2013-04-17 11:07:00'),
(162, '2013-04-16 12:10:00'),
(160, '2013-04-20 12:10:00')
SQL小提琴here(希望 - 一直有问题)。