通过特定id为数据库中的每个数据分类,并且每个类别mysql只允许获得2个

时间:2014-12-06 08:44:19

标签: mysql sql select sql-order-by greatest-n-per-group

可能重复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  |
+-------+----------+-------------+

我希望查询能够做到这一点吗?

2 个答案:

答案 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;