2013-05-14 4 views
0

У меня есть набор дат из таблицы в sql. Я хочу вернуть диапазоны дат, и мне нужна помощь.Как вернуть последовательные диапазоны дат frm набор дат в 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

+1

SQL - это просто язык. Добавьте тег с движком базы данных ** и **, который вы используете – Lamak

+0

Management Studio не является движком. – zimdanen

+0

Сделайте 'select @@ version', чтобы увидеть версию вашего SQL Server. –

ответ

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 

Это будут получать номера строк для каждого ПК, затем предоставлять соединения между таблицей и самим собой, отфильтровывая любые строки, которые не имеют соответствия, если они не являются первой строкой для этого ПК.

Вот таблица:

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 (надеюсь, - были вопросы, имеющие).

+0

Благодарю вас zimdanen! :) – user410911

Смежные вопросы