我有这张桌子
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我不知道该怎么做。
答案 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
来删除任何重复行,它将使用它遇到的第一行。因为我们已经按照正确的顺序放置它,所以它会抓住我们想要的那一行。