带键的表是日期和序列号

时间:2019-02-13 15:46:58

标签: mysql sql max

预先感谢您的帮助。

我有一个看起来像这样的SQL表。

enter image description here

日期和序列号是一个组合键。这意味着不能有具有相同日期和相同序列号的元组。现在,我想获取每个serial_number的最新日期(交易)。我怎样才能做到这一点?这是我尝试过的方法,但它给了我一些重复。

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 :(得分:0)

您不仅需要相关子查询,还需要相关子查询:

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;

答案 1 :(得分:0)

您可以在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;