使用 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;
需要使用 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;