SQL-запрос Создание начальной и конечной даты - PullRequest
3 голосов
/ 23 марта 2011

Хорошо, допустим, у меня есть таблица, которая выглядит следующим образом:

 ID   | DATE
 2  | 2010-08-12
 2  | 2010-08-16 
 2  | 2010-08-17 
 2  | 2010-12-21 
 2  | 2010-12-22 
 2  | 2011-05-25 

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

 ID   | STARTDATE  | ENDDATE
 2  | 2010-08-12 | 2010-08-15
 2  | 2010-08-16 | 2010-08-16
 2  | 2010-08-17 | 2010-12-20
 2  | 2010-12-21 | 2010-12-21
 2  | 2010-12-22 | 2010-05-25

Ответы [ 3 ]

5 голосов
/ 23 марта 2011

Я не буду указывать здесь идентификатор, так как вижу, что он не имеет значения в запросе.Если вы хотите, вы положите его позже.Это запрос MSSQL.

select tb1.date as startdate,dateadd(d,-1,tb2.date) as enddate
from the_table tb1
join the_table tb2 on tb2.date>tb1.date
left join the_table tb3 on tb1.date<tb3.date and tb3.date<tb2.date
where tb3.date is null

Он может быть легко переведен для других типов БД.

1 голос
/ 23 марта 2011

если у вас есть сериализованный идентификатор как (1,2,3,4,5, ..), то вы можете получить вышеупомянутое с этим запросом с 1 дополнительными данными в конце, но вы можете опустить, что следующим является запрос mysqlВЫБЕРИТЕ начальную дату, (выберите начальную дату - ИНТЕРВАЛ 1 ДЕНЬ из tester a, где a.id = b.id +1) в качестве конечной даты ОТ tester b

1 голос
/ 23 марта 2011

Эти две ссылки дадут вам приблизительное представление.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...