可能重复MySql Query: Select top 3 rows from table for each category。我不清楚这个答案,为什么我再问一次。
这是我的数据库
+-------+----------+-------------+
| id | app_Id | Content |
+-------+----------+-------------+
| 1 | 19 | Hello Peer |
+-------+----------+-------------+
| 2 | 20 | Hello Peer |
+-------+----------+-------------+
| 3 | 19 | Hello Peer |
+-------+----------+-------------+
| 4 | 19 | Hello Peer |
+-------+----------+-------------+
| 5 | 21 | Hello Peer |
+-------+----------+-------------+
| 6 | 20 | Hello Peer |
+-------+----------+-------------+
| 7 | 19 | Hello Peer |
+-------+----------+-------------+
| 8 | 20 | Hello Peer |
+-------+----------+-------------+
| 9 | 21 | Hello Peer |
+-------+----------+-------------+
现在我如何通过app_Id选择记录类别,并通过appId desc为每个类别和订单限制2
如果上述陈述不明确。这是我上述数据库的预期输出记录。
+-------+----------+-------------+
| id | app_Id | Content |
+-------+----------+-------------+
| 4 | 19 | Hello Peer |
+-------+----------+-------------+
| 7 | 19 | Hello Peer |
+-------+----------+-------------+
| 6 | 20 | Hello Peer |
+-------+----------+-------------+
| 8 | 20 | Hello Peer |
+-------+----------+-------------+
| 5 | 21 | Hello Peer |
+-------+----------+-------------+
| 9 | 21 | Hello Peer |
+-------+----------+-------------+
我希望查询能够做到这一点吗?
答案 0 :(得分:1)
试试这个:
SELECT id, app_Id, Content
FROM (SELECT id, app_Id, Content,
IF(@appId=@appId:=app_Id, @rowNo:=@rowNo+1, @rowNo:=1) AS rowNo
FROM tableA, (SELECT @rowNo:=1, @appId:=0) a
ORDER BY app_Id, id DESC
) AS a
WHERE rowNo <= 2
ORDER BY app_Id
答案 1 :(得分:0)
您可以使用更简单的版本
获得所需的结果select c.* from category c
where
(
select count(*) from category as c1
where c.app_Id = c1.app_Id
and c.id < c1.id
)<=1
order by c.app_Id;