在sql中选择每个组的第一行[重复]

Posted

技术标签:

【中文标题】在sql中选择每个组的第一行[重复]【英文标题】:Select First Row of Every Group in sql [duplicate] 【发布时间】:2013-05-07 22:31:23 【问题描述】:

我有两张桌子。

1-> SM_Employee

 (1) employeeid   
 (2) roleid
 (3) storeid

2-> SM_SalesRepWorkflow

 (1) workflowid
 (2) Salesrepid   foreign key to employeeid
 (3) QuantityAssigned
 (4) QuantityLeft
 (5) month 
 (6) year

通过这些表,我需要从 SM_SalesRepWorkflow 订单中为 CurrentMonth 和 CurrentYear 按 SalesRepId 选择每个 SalesRep 详细信息的第一行。

例子

Workflowid SalesRepId QuantityAssigned QuantityLeft Month Year

WF_101:EMP_101:100:90:2013 年 5 月 WF_101:EMP_102:100:100:2013 年 5 月 WF_101:EMP_103:100:80:2013 年 5 月 WF_102:EMP_101:100:70:2013 年 5 月

所以我想要的结果是

WF_101:EMP_101:100:90:2013 年 5 月 WF_101:EMP_102:100:100:2013 年 5 月 WF_101:EMP_103:100:80:2013 年 5 月

所以一个销售代表可以有很多工作流程。 但我想要当前月份和年份的每个 SalesRep 的第一个。

【问题讨论】:

你的排序顺序是什么? 按 SalesRepId、WorkflowId 和每个 SalesRepId 排序,我想要该 SalesRepId 的第一行。 【参考方案1】:

您可以像这样使用ROW_NUMBER() 函数:

SELECT *
  FROM(SELECT workflowid, salesRepId, quantityAssigned,
              quantityLeft, month, year
              , ROW_NUMBER()
                OVER (PARTITION BY salesRepId
                          ORDER BY workflowid) AS rownumber
         FROM sm_salesRepWorkflow)
 WHERE rownumber = 1;

Fiddle Demo

【讨论】:

只是找这个谢谢。【参考方案2】:

我在理解这个问题时遇到了一点麻烦,所以如果我离开了,我会在之后对其进行编辑,但看起来你想做类似SELECT * FROM SM_SalesRepWorkflow WHERE Workflowid = latest 之类的事情,其中​​ latest 是工作流的 ID。也许您可以确定查询之外的最新信息并将其引入而不是从查询中执行?

【讨论】:

这更像是一个评论而不是一个答案。请避免这样做,以免您的帖子被标记。 我给出了一个我认为解决了这个问题的答案,但也要求 OP 重新澄清。发表评论表示困惑然后过于肯定的答案似乎很浪费。

以上是关于在sql中选择每个组的第一行[重复]的主要内容,如果未能解决你的问题,请参考以下文章

有重复组时选择最后一组的第一条记录

SQL如何选择所有重复id的行,但不是每行的第一行?

在熊猫多索引数据框中返回满足逻辑索引条件的每个组的最后一行[重复]

如何在 hive sql 中获取每个组的最大 row_number()

在 'groupby()' 和 'value_counts() 函数之后选择每个组的第一行

SQL:查找每组的最大记录[重复]