Получить последние N номеров записей из таблицы, используя где в условии - PullRequest
0 голосов
/ 11 октября 2019

Необходимо получить последние 3 записи из таблиц каждой orderid(s), относящейся к storeid(s), используя условие WHERE IN.

Для Например:

--------------------------
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

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 11 октября 2019

Вот решение 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;
1 голос
/ 11 октября 2019

используя 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
...