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

0

У меня есть следующий выбор в моей базе данных mysql:

select t.col1, t.THE_DATE, (select ?? as PREVIOUS_DATE) 
from DUMMY_TABLE t 
order by date

То, что я пытаюсь достичь, - это "PREVIOUS_DATE" содержать значение столбца предыдущей строки "THE_DATE", если оно есть.

Поэтому, если DUMMY_TABLE имеет данные:

col1 THE_DATE 
x     10-01-2010
x     10-01-2012
x     10-01-2009

мой выбор должен вернуться

col1  THE_DATE   PREVIOUS_DATE
x    10-01-2009       
x    10-01-2010   10-01-2009
x    10-01-2012   10-01-2010
  • 0
    Можно ли использовать цикл, а не простой выбор? Может быть лучше избежать нескольких результатов в подзапросе. Если у вас нет уникального идентификатора
  • 0
    @KESO - цикл почти никогда не бывает лучше, чем запрос.
Показать ещё 2 комментария
Теги:

1 ответ

3
Лучший ответ

В subquery с предложением limit вам нужен order by:

select t.col1, t.the_date, 
      ( select t1.the_date 
        from dummy_table t1
        where t1.col = t.col and
              t1.the_date < t.the_date
        order by t1.the_date desc
        limit 1
      ) as PREVIOUS_DATE 
from dummy_table t 
order by the_date;
  • 0
    Это нормально, если есть повторяющиеся даты?
  • 0
    @ChrisLear Это зависит от того, что вы хотите случиться. Если у вас есть последовательность 0, 1, 2, 2, 3, 4 и вы запрашиваете предыдущие цифры, вы получаете NULL, 0, 1, 1, 2, 3 . Оба 2 считают, что непосредственно предшествующее значение равно 1 . Все хорошо? Ну, это для вас, чтобы определить.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню