Выберите разницу между датами строк в MySQL - PullRequest
8 голосов
/ 11 сентября 2011

Я хочу вычислить разницу в уникальных полях даты между различными строками в одной и той же таблице.

Например, учитывая следующие данные:

   id | date
   ---+------------
    1 | 2011-01-01
    2 | 2011-01-02
    3 | 2011-01-15
    4 | 2011-01-20
    5 | 2011-01-10
    6 | 2011-01-30
    7 | 2011-01-03

Я хотел бы сгенерироватьзапрос, который производит следующее:

id | date       | days_since_last
---+------------+-----------------
 1 | 2011-01-01 | 
 2 | 2011-01-02 |  1
 7 | 2011-01-03 |  1
 5 | 2011-01-10 |  7
 3 | 2011-01-15 |  5
 4 | 2011-01-20 |  5
 6 | 2011-01-30 | 10

Любые предложения о том, какие функции даты я бы использовал в MySQL, или есть какой-то выбор, который бы делал это?

(Конечно, я неНе забудьте поставить WHERE date > '2011-01-01', чтобы проигнорировать первый ряд.)

Ответы [ 2 ]

2 голосов
/ 11 сентября 2011

Может помочь коррелированный подзапрос:

SELECT
  id,
  date,
  DATEDIFF(
    (SELECT MAX(date) FROM atable WHERE date < t.date),
    date
  ) AS days_since_last
FROM atable AS t
2 голосов
/ 11 сентября 2011

Примерно так должно работать:

 SELECT mytable.id, mytable.date, DATEDIFF(mytable.date, t2.date)
 FROM mytable
 LEFT JOIN mytable AS t2 ON t2.id = table.id - 1

Однако это означает, что ваши id непрерывны в вашей таблице, иначе это не будет работать вообще.И, возможно, MySQL будет жаловаться на первую строку, поскольку t2.date будет null, но у меня нет времени проверять сейчас.

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