Таблица с ключом - дата и серийный номер - PullRequest
0 голосов
/ 13 февраля 2019

заранее благодарю за помощь.

У меня есть таблица SQL, которая выглядит следующим образом.

enter image description here

дата и серийный номер вместе представляют собой составной ключ.Это означает, что не может быть кортежа с той же датой и тем же серийным номером.Теперь я хочу получить самую последнюю дату (транзакцию) для серийного номера.Как я могу это сделать?Это то, что я пытался, но это дает мне несколько дубликатов.

SELECT DATE_FORMAT(`t1`.date,'%m-%d-%y') as date  , `t1`.serial_number
FROM table1 `t1`
WHERE date IN (SELECT MAX(date) FROM table1 GROUP BY serial_number)
order by `t1`.date desc, `t1`.serial_number asc;

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

Вы можете использовать внутреннее соединение max_date для серийного номера

> SELECT DATE_FORMAT(`t1`.date,'%m-%d-%y') as date  
>     , `t1`.serial_number FROM `table` `t1` INNER JOIN (
>     SELECT serial_number, MAX( DATE_FORMAT(`T`.date,'%m-%d-%y')) max_date 
>     FROM `table` T
>     GROUP BY serial_number ) T ON T.serial_number = `t1`.serial_number AND T.max_date  = DATE_FORMAT(`t1`.date,'%m-%d-%y')
> 
> order by `t1`.date desc, `t1`.serial_number asc;
0 голосов
/ 13 февраля 2019

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

SELECT DATE_FORMAT(t.date,'%m-%d-%y') as date, t.serial_number
FROM table1 t
WHERE t.date = (SELECT MAX(t1.date) 
                FROM table1 t1 
                WHERE t1.serial_number = t.serial_number
               )
order by t.date desc, t.serial_number asc;
...