相当于为mysql保留dense_rank

时间:2016-04-04 05:04:02

标签: mysql

我有这张桌子

create table  sd_devices (
device_code varchar(128),
vin varchar(128),
created_at  datetime,
loaded_at   datetime
)

我想通过device_code为每个vin订单选择第一个created_at desc, loaded_at desc订单。

在oracle中,我会使用keep dense_rank,但在这里使用MySQL我不知道该怎么做。

1 个答案:

答案 0 :(得分:2)

这应该这样做:

SELECT DISTINCT device_code,
       vin
       FROM (
SELECT sd_devices.*
FROM sd_devices
ORDER BY created_at DESC, loaded_at DESC ) AS a
GROUP BY device_code

在子查询中,您选择所有行并按正确顺序对它们进行排序, 然后在外部查询中使用DISTINCT来删除任何重复行,它将使用它遇到的第一行。因为我们已经按照正确的顺序放置它,所以它会抓住我们想要的那一行。