使用 where in 条件从 table 获取最新的 N 条记录

Get Latest N numbers of records from table using where in condition

需要使用 WHERE IN 条件从与 storeid(s) 相关的每个 orderid(s) 的表中获取最新的 3 条记录。

例如:

--------------------------
orderid      storeid
1               2
5               2
7               2
15              5
18              5
25              5
29              9
65              9
78              9
------------------------

这是我的查询:

SELECT * FROM orders WHERE store_id IN('2', '5', '9') ORDER BY store_id

提前致谢。

使用 row_number() 你可以获得最新的 3 orderids

select * from orders o
inner join (
   select row_number() over (partition by storeid order by orderid desc) rn, orderid 
   from orders) t1 on t1.orderid = o.orderid
where t1.rn <= 3

这是 mysql 解决方案,可为每个商店获取 n 行数:

SELECT
*
FROM
(
SELECT 
    store_id,
    order_id,
    @curRank := CASE WHEN @prevStore = store_id THEN @curRank + 1 ELSE 0 END AS rank,
    @prevStore:= store_id AS prevStore
FROM orders a, (SELECT @curRank := 0, @prevStore := NULL) r
WHERE store_id IN('2', '5', '9')
ORDER BY 1 desc,2
)a 

WHERE a.rank<3;