【问题标题】:Select First Row of Every Group in sql [duplicate]在sql中选择每个组的第一行[重复]
【发布时间】: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 的第一行。

标签: sql oracle


【解决方案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 重新澄清。发表评论表示困惑然后过于肯定的答案似乎很浪费。
猜你喜欢
  • 1970-01-01
  • 2010-12-25
  • 2018-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-31
  • 1970-01-01
  • 2017-07-24
相关资源
最近更新 更多