Как рассчитать разницу дней в вауле в одном столбце? - PullRequest
2 голосов
/ 22 апреля 2020

У меня есть такие данные:

select * from date_table;
 startdate
2018-08-22
2018-08-24
2018-08-27
2018-08-29
2018-08-31
2018-09-05
2018-09-07
2018-09-10

Я написал этот запрос, который дает только разницу дней

CREATE temporary TABLE if not exists results AS (
select t.startdate, datediff( 
(select min(t1.startdate) 
from 
date_table t1 where
 t1.startdate>t.startdate),
t.startdate ) days_diff 
from 
date_table t) ;

select * from results:

Выше запрос дает результат как:

startdate   days_diff 
2018-08-22    2
2018-08-24    3
2018-08-27    2
2018-08-29    2
2018-08-31    5
2018-09-05    2
2018-09-07    3  
2018-09-10  

Но я хочу получить результат вроде:

startdate     enddate      days_diff 
2018-08-22   2018-08-24      2
2018-08-27   2018-08-29      2
2018-08-31   2018-09-05      5
2018-09-07   2018-09-10      3

Я использую MySQL (версия 5.6). Пожалуйста, дайте мне знать, если есть какое-либо решение для этой проблемы. Заранее спасибо.

1 Ответ

1 голос
/ 22 апреля 2020

Похоже, вы хотите перечислить строки, а затем агрегировать. В версиях до 8.0 вы можете использовать переменные. Остальное - агрегация:

select min(start_date) as start_date, max(start_date) as end_date
from (select (@rn := @rn + 1) as seqnum, t.*
      from (select t.* from date_table t order by start_date) t cross join
           (select @rn := 0) params
     ) t
group by floor((seqnum - 1) / 2);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...