2013-05-13 50 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