【问题标题】:Limit rows in SQL for each group with Joins使用连接限制每个组的 SQL 行数
【发布时间】:2015-04-09 18:59:02
【问题描述】:

我正在尝试限制每组输出的行数。有什么方法可以做到。案例说明如下:

表 1:Customer_Details

Customer ID Vandeur pid_01 Vandeur pid_02 Vandeur pid_03 Vandeur pid_04 Vandeur pid_01 Vandeur pid_02 Vandeur pid_03 Vandeur pid_04 Vandeur pid_05

表 2:Month_Details

Month ID Jan pid_01 Jan pid_02 Jan pid_03 Jan pid_04 Feb pid_01 Feb pid_02 Feb pid_03 Feb pid_04 Feb pid_05

我的输出要求是 - 我只想要 customer Vandeur 每个月的前 3 个 ID

样品 O/P:

Customer Month ID Vandeur Jan pid_01 Vandeur Jan pid_02 Vandeur Jan pid_03 Vandeur Feb pid_01 Vandeur Feb pid_02 Vandeur Feb pid_03

有人可以建议我实现它的方法吗?

【问题讨论】:

标签: mysql sql


【解决方案1】:

Mysql 不支持像其他 RDBMS 那样的窗口函数,要获得每组 n 个结果,您可以使用用户定义的变量

 SELECT DISTINCT c.Customer,m1.`Month`,c.ID
 FROM Customer_Details c
 JOIN (
  SELECT m.*,
   @r:= CASE WHEN @g = `Month` THEN  @r +1 ELSE 1 END  rank,
   @g:=`Month`
    FROM `Month_Details` m ,
    (SELECT @g:=NULL,@r:=NULL) r   
    ORDER BY m.`Month` DESC ,REPLACE(m.ID,'pid_','') * 1  
     ) m1 ON(c.ID = m1.ID)
  WHERE m1.rank <=3
 AND c.Customer= 'Vandeur'
 ORDER BY m1.`Month` DESC ,REPLACE(m1.ID,'pid_','') * 1

DEMO

【讨论】:

  • o/p 不限于 3。我可以看到整组值。 'Vandeur', 'Feb', 'pid_01' 'Vandeur', 'Feb', 'pid_01' 'Vandeur', 'Feb', 'pid_02' 'Vandeur', 'Feb', 'pid_02' 'Vandeur', 'Feb', 'pid_03' 'Vandeur', 'Feb', 'pid_03' 'Vandeur', 'Jan', 'pid_01' 'Vandeur', 'Jan', 'pid_01' 'Vandeur', 'Jan', 'pid_02' 'Vandeur', 'Jan', 'pid_02' 'Vandeur', 'Jan', 'pid_03' 'Vandeur', 'Jan', 'pid_03'
  • @user3624000 我不好使用 distinct 并用 NULL 初始化变量
猜你喜欢
  • 2011-02-08
  • 1970-01-01
  • 2022-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-02
  • 1970-01-01
  • 2016-09-26
相关资源
最近更新 更多