SQL - Запрос выбора следующей даты

У меня есть таблица со многими идентификаторами и множеством дат, связанных с каждым идентификатором, и даже несколькими идентификаторами без Дата. Для каждой комбинации идентификатора и даты я хочу выбрать идентификатор, дату и следующую самую большую дату, также связанную с тем же идентификатором, или null в качестве следующей даты, если ее нет.

Пример таблицы:

ID      Date
1       5/1/10
1       6/1/10
1       7/1/10
2       6/15/10
3       8/15/10
3       8/15/10
4       4/1/10
4       4/15/10
4       

Желаемый результат: Боб 2010-08-03 08:00:00 2010-08-03 12:00:00 4 Боб 03-08-2010, 13:00:00 ...

У меня есть таблица данных, которая выглядит примерно так:

Name    StartTime              FinishTime              Work
Bob     2010-08-03 08:00:00    2010-08-03 12:00:00     4
Bob     2010-08-03 13:00:00    2010-08-03 16:00:00     3
Pete    2010-08-04 08:00:00    2010-08-04 12:00:00     4
Mark    2010-08-04 10:00:00    2010-08-04 12:00:00     2

Ни один из этих диапазонов дат никогда не должен перекрывать полночь.
Я хочу написать SQL, который даст мне следующий результат, учитывая входную дату начала 2010-08-02 и дату окончания 2010-08-05

Date          Name   TotalWork
2010-08-03    Bob    7
2010-08-03    Pete   3
2010-08-04    Pete   4
2010-08-04    Mark   2 

, с которой я мог бы жить, и на самом деле может в конечном итоге потребоваться, чтобы есть дни, не связанные с работой, также должны быть представлены в наборе результатов, возможно, в виде такой строки:

2010-08-05     NULL   0

Я не совсем уверен, как перебирать даты в SQL так же, как и с другими языками .

Чтобы дать этому некоторый контекст, выходные данные этого будут в конечном итоге подключены к элементу управления Stacked Chart .Net.

Может ли кто-нибудь дать мне подсказку, ссылку на учебное пособие или другую помощь? В противном случае я думаю, что буду возиться с этим в течение нескольких дней!

Спасибо!

Джонатан

6
задан pilcrow 10 September 2012 в 04:27
поделиться