как получить последние данные даты из таблицы

#mysql #sql #greatest-n-per-group

#mysql #sql #наибольшее число пользователей на группу

Вопрос:

Я хочу получить строки с последней датой и следующей последней датой. Я искал много сайтов, и я до сих пор не знаю, как написать инструкцию sql.

Из этого

 id      inputDate       refNo
1       2016-09-22      16092201820X0X
2       2016-09-22      16092200230X1X
3       2016-09-22      16092200810X3X
4       2016-09-21      16092200430X2X
5       2016-09-21      16092201460X7X
6       2016-09-21      16092200430X1X
7       2016-09-20      16092202260X3X
8       2016-09-20      16092200330X6X
9       2016-09-20      16092200610X3X
10      2016-09-19      16092200430X8X
11      2016-09-19      16092200450X1X
  

к этому

 id      inputDate       refNo
1       2016-09-22      16092201820X0X
2       2016-09-22      16092200230X1X
3       2016-09-22      16092200810X3X
4       2016-09-21      16092200430X2X
5       2016-09-21      16092201460X7X
6       2016-09-21      16092200430X1X
  

Комментарии:

1. Для какой марки / версии базы данных RDBMS это предназначено?

2. я использую xampp, localhost / phpmyadmin для тестирования дома, но в моей работе используется hibernate spring mvc. Я не знаю, что такое СУБД моей работы

Ответ №1:

В стандартном SQL ANSI вы бы использовали dense_rank() :

 select t.*
from (select t.*, dense_rank() over (order by inputdate desc) as seqnum
      from t
     ) t
where seqnum <= 2;
  

MySQL не поддерживает стандартные функции окна ANSI (в отличие от всех других основных баз данных).

В MySQL это сложнее. Вот удобный метод:

 select t.*
from t join
     (select inputdate
      from (select distinct inputdate from t) t
      order by inputdate desc
      limit 2
     ) tt
     on t.inputdate = tt.inputdate;
  

На самом деле вам не нужен второй подзапрос, поэтому вы можете сделать:

 select t.*
from t join
     (select distinct inputdate
      from t
      order by inputdate desc
      limit 2
     ) tt
     on t.inputdate = tt.inputdate;
  

Но может сбить с толку запоминание того select distinct , происходит ли это до или после order by .

Комментарии:

1. спасибо за быстрый ответ, я попробовал ваш код, но я получил красную строку во втором select (этот тип предложения был ранее проанализирован), а также слово seqnum (псевдоним был найден ранее).

2. @peter: вам нужно сообщить нам, какую СУБД вы используете, и точное сообщение об ошибке, которое вы получаете при запуске этого оператора.