我正在尝试从每个类别获得前2个最新行,并且可以稍后进行缩放,因此我可以例如获得前4行而不是前2行。
这是我的表格的样子
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;
答案 0 :(得分:3)
这对MySQL来说更是一种痛苦。可能最简单的方法是使用变量:
requires
答案 1 :(得分:-1)
我会选择这样的东西:
select * from table group by category_id order by created_at limit 2
我的mySql技能有点生疏,但这个(或它的概念)应该可以解决问题。