Рассчитать разницу в днях от даты и времени в предыдущей строке - PullRequest
0 голосов
/ 17 января 2019

У меня есть таблица log_file, которую я создал с Created_at в качестве столбца datetime, мне нужно получить дни между строками с помощью creat_at

select id,DATE(created_at), datediff( created_at, prev_date) as diff
from (select t.*,
         (select DATE(t2.created_at)
          from log_file t2
          where t2.id = t.id and
                DATE(t2.created_at) <  DATE(t.created_at)
          order by  t2.created_at desc
          limit 1
         ) as prev_date
  from log_file t
 )  t

но это даст мне Null в diff

    id DATE(created_at) diff
     2 2019-01-16       NULL
     3 2019-01-19       NULL
     4 2019-01-21       NULL

1 Ответ

0 голосов
/ 17 января 2019

Если вы используете версию MySQL более ранней, чем 8+, и также не хотите использовать переменные сеанса, то коррелированный подзапрос - это один из способов перейти сюда.

SELECT
    t1.id,
    t1.created_at,
    DATEDIFF(t1.created_at,
             (SELECT t2.created_at FROM log_file t2
              WHERE t2.created_at < t1.created_at
              ORDER BY t2.created_at DESC LIMIT 1)) AS diff
FROM log_file t1;

Вы были на правильном пути, но условие WHERE в вашем подзапросе содержит некорректно добавленное условие:

where t2.id = t.id

Удалите его, и ваш текущий код может даже работать как есть.

...