Дата начала и окончания SQL-запроса - PullRequest
0 голосов
/ 02 сентября 2011

Это немного отличается от этого: SQL-запрос Создание начальной и конечной даты

И я не знаю, как сформулировать этот вопрос, когда я сосу по-английски.

Таблица

Name | Date
Foo | 1-Sep
Foo | 2-Sep
Foo | 3-Sep
Foo | 5-Sep
Foo | 6-Sep
Foo | 7-Sep

Foo | 1-Dec
Foo | 2-Dec

Foo | 4-Dec
Foo | 5-Dec
Foo | 6-Dec
Foo | 7-Dec
Foo | 8-Dec

Foo | 1-Feb

Foo | 14-Feb
Foo | 15-Feb
Foo | 16-Feb
Foo | 17-Feb
Foo | 18-Feb
Foo | 19-Feb
Foo | 20-Feb

Foo | 22-Feb

Мне нужно создать запрос с приведенным ниже результатом

Результат запроса

Name | Start Date  |  End Date
Foo  |  1-Sep      | 3-Sep
Foo  |  5-Sep      | 7-Sep
Foo  |  4-Dec      | 8-Dec
Foo  |  1-Feb      | 1-Feb
Foo  |  1-Dec      | 2-Dec
Foo  |  14-Feb     | 20-Feb
Foo  |  22-Feb     | 22-Feb

Обновление:

  • Дата начала: Первый день серии последовательных дней
  • Дата окончания: Последний день серии последовательных дней
  • Если дата не включена в серию последовательных дней, как, например, 22 февраля, это дата начала и окончания.

1 Ответ

0 голосов
/ 02 сентября 2011

Не уверен, что это лучший способ.Сначала вы можете отфильтровать все даты, которые имели предыдущий и следующий день, затем вы можете использовать решение, описанное в здесь

Запрос, который фильтрует несущественные даты:

select t1.Name, t.Date from Table t1
left outer join Table t2 on dateadd(d,-1,t1.Date) = t2.Date 
left outer join Table t3 on dateadd(d,1,t1.Date) = t3.Date
where t2.Date is null or t3.Date is null 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...