【问题标题】:SQLITE select by group and limit results for each groupSQLITE 按组选择并限制每组的结果
【发布时间】:2021-06-08 10:51:03
【问题描述】:

我有以下 SQLITE 表:

COL1 COL2 COL3
tit1 cat1 time1
tit2 cat3 time2
tit3 cat1 time3
tit4 cat1 time4
tit5 cat3 time5
tit6 cat2 time6
tit7 cat1 time7

我想选择按 COL2、WHERE COL2 == cat1 或 cat2 分组的所有行,但将结果限制为每个组最多 2 行,并按 COL3 DESC 对结果进行排序。

因此,例如,在这种情况下,我只想得到:

COL1 COL2 COL3
tit7 cat1 time7
tit4 cat1 time4
tit6 cat2 time6

是否有可能通过(可能)一个或最多 2 个查询来获得此信息?

到目前为止,我尝试了这个,但它没有按预期工作:

SELECT * FROM "tablename" WHERE "COL2" = "cat1" OR "COL2" = "cat2" GROUP BY "COL2" ORDER BY "COL3" DESC LIMIT 2

感谢您的帮助

【问题讨论】:

    标签: php sqlite


    【解决方案1】:

    过滤表并使用 ROW_NUMBER() 窗口函数:

    SELECT COL1, COL2, COL3
    FROM (
      SELECT *, ROW_NUMBER() OVER (PARTITION BY COL2 ORDER BY COL3 DESC) rn 
      FROM tablename  
    )
    WHERE rn <= 2
    ORDER BY COL2, COL3 DESC
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多