我试图从每个类别获得前2最新行,这样就可以在以后缩放,所以我可能例如获得前4行,而不是顶部2.MySQL的选择前N行每一类
这里是我的表看起来像
Id | category_id | created_at
------ | ----------- ----------
1 | 1 | 2017-12-01
2 | 2 | 2017-12-02
3 | 4 | 2017-12-03
4 | 2 | 2017-12-04
5 | 1 | 2017-12-05
6 | 1 | 2017-12-06
7 | 3 | 2017-12-07
8 | 4 | 2017-12-08
9 | 4 | 2017-12-09
10 | 3 | 2017-12-10
11 | 5 | 2017-12-11
我想获得最新的2行(基于created_at列)的ID,所以我所要的输出是这样的
Ids
------
5
6
2
4
7
10
8
9
11
我做像
select * from table
inner join (
select * from table
order by category_id, created_at
limit 2
) as tb
on tb.id = table.id and tb.category_id = table.category_id
显然它不工作,只是想分享我到目前为止达成的目标。 有没有办法在MySQL中做到这一点?
编辑
其实我这样做,它还挺工作
SELECT *
FROM
(SELECT *,
@count := IF(@current_category = category_id, @count + 1, 1) AS count,
@current_category := category_id
FROM table
ORDER BY category_id, created_at DESC
) ranked
WHERE count <= 2;
[获得每组分组结果的前n条记录]的可能重复(http://stackoverflow.com/questions/12113699/get-top-n-records-for-each-group-of-grouped-results ) –