【问题标题】:Select limited number of rows based on unique column value根据唯一列值选择有限数量的行
【发布时间】:2017-10-25 11:28:55
【问题描述】:

我有一个如下格式的表格

ID SOURCE_ID
 1 1
 2 1
 3 1
 4 2
 5 3
 6 3
 7 4
 8 4
 9 4
10 4
11 4
12 1
13 1
14 3
15 3
16 3
17 3
18 2
19 2

我希望能够为每个唯一的 source_id 选择 MAX 5 条记录。

所以我最终应该为 source_id = 1 返回 5 行,为 souce_id = 2 返回 5 行,依此类推。

有什么想法吗?提前谢谢你。

【问题讨论】:

  • id 的前 5 个,后 5 个还是随机的 5 个?
  • @P.Salmon 顺序并不重要。重要的是,对于 source_id = 1,我将需要最多 5 条记录(如果该表中没有更多,则需要更少),对于 source_id = 2,最多需要 5 条记录,依此类推。但我不想指定硬编码这些值,我希望能够在同一个查询中选择它们

标签: mysql select unique


【解决方案1】:

例如:

SELECT id
     , source_id 
  FROM 
     ( SELECT id
            , source_id
            , CASE WHEN @prev = source_id THEN @i:=@i+1 ELSE @i:=1 END i
            , @prev := source_id prev 
         FROM my_table
            , (SELECT @prev:=null,@i:=0) vars 
        ORDER 
           BY source_id
            , id
     ) x 
 WHERE i <=5 
 ORDER 
    BY id;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-13
    • 2018-01-31
    • 1970-01-01
    • 1970-01-01
    • 2012-05-16
    • 1970-01-01
    相关资源
    最近更新 更多