2013-05-13 71 views
10

我有两个表。在sql中选择每个组的第一行

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顺序每SalesRep的详细的第一行通过SalesRepId为CurrentMonth和CurrentYear。

Workflowid SalesRepId QuantityAssigned QuantityLeft月年

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

所以导致我想要的是

WF_101:EMP_101:100:90:五月:2013
WF_101:EMP_102:100:100:五月:2013
WF_101:EMP_103:100:80:五月:2013

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

+0

你是什么排序? – Rachcha 2013-05-13 19:36:11

+0

Order By SalesRepId,WorkflowId和每个SalesRepId我想要SalesRepId的第一行。 – Vijay 2013-05-13 19:42:32

回答

25

可以使用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

+0

只需要找这个 谢谢。 – Vijay 2013-05-13 20:12:15

0

我在理解这个问题时遇到了一些麻烦,所以如果我关闭了,我会在之后对其进行编辑,但是看起来您想要执行类似SELECT * FROM SM_SalesRepWorkflow WHERE Workflowid = latest这样的操作,其中最新的是工作流的ID。也许你可以确定查询的最新外部,并把它带入,而不是从查询中做到这一点?

+2

这不仅仅是一个答案而是一个评论。请避免这样做,以免您的帖子被标记。 – Rachcha 2014-01-06 04:38:48

+0

我给了一个答案,我认为这个问题的解决,但也要求OP重新澄清。发表评论表达混乱,然后过于肯定的答案似乎是浪费。 – BWStearns 2014-01-16 17:04:21