2013-04-09 49 views
1

我正在嘗試使用並學習Partition By以返回一對多關係的最大步數。 基本上,我有一個companyID,這是公司表中唯一的。該公司有一些步驟,但StepCompany表中可能有很多步驟。 companID存在於stepCompany表中該公司可能存在的每個步驟。這些步驟有StepOrder,這是我需要用來總是返回MAX的那些。但是我需要一個查詢來從公司和stepCompany返回兩個信息,這些信息基於哪個步驟基本上是該公司隊列中的最後一步。 來源我發現我要麼不明白,因爲我是新來的分區,或者他們給別人分區,並在外部選擇結束時,他們確實喜歡別名= 1例如。
這是查詢返回,沒有任何分區或任何東西。使用Partition By從Join SQL返回MAX記錄

CompanyIDticketID|||| companyCompanyID||| stepCompanyCompanyID|||| stepCompanyStepOrder 
----------------- ---------------- -------------------- -------------------- 
136211  ||||  10B7E005  ||| 10B7E005  |||  1 

136211  ||||  10B7E005  ||| 10B7E005  |||  2 

136211  ||||  10B7E005  ||| 10B7E005  |||  3 

155585  ||||  3A2078C5  ||| 3A2078C5  |||  1 

155585  ||||  3A2078C5  ||| 3A2078C5  |||  2 

193256  ||||  95AC74FB  ||| 95AC74FB  |||  1 

193256  ||||  95AC74FB  ||| 95AC74FB  |||  2 

210425  ||||  0BAD0261  ||| 0BAD0261  |||  1 

210425  ||||  0BAD0261  ||| 0BAD0261  |||  2 

對不起,格式不好,不知道如何在這裏整潔地創建一個表。

所以這些是2表正在加入。 companyCompanyID = stepCompanyCompanyID用於加入它們。因此,對於companyID 136211,我需要stepCompanyStepOrder 3來顯式返回stepCompany表中的數據。對於companyIDticketID 155585我需要stepCompanyStepOrder 2等。 我寧可不提供我的SQL,因爲它不是很漂亮:)

我很感謝大家的幫助!

感謝,

回答

1

這裏的部分查詢,

WITH records 
AS 
(
    SELECT ...., 
      ROW_NUMBER() OVER (PARTITION BY CompanyIDticketID 
           ORDER BY stepCompanyStepOrder DESC) rn 
    FROM .... 
) 
SELECT * 
FROM records 
WHERE rn = 1 

你只需要插件WITH子句中的連接查詢,並添加額外的列哪個分區的記錄。

+0

sweeeeeeeeeeeeeet!我認爲我在其他資料中發現的那個= 1,就是這樣...我只是不理解這個概念..很簡單...很感謝JW! – 2013-04-09 15:19:52

+0

不客氣':D' – 2013-04-09 15:20:34

+0

刪除'WHERE rn = 1'並查看'RN'列中發生了什麼:D' – 2013-04-09 15:28:28

1

沒有加入,因爲你沒有提供它,但它不應該事:

WITH cte 
    AS (SELECT rn = Row_number() 
        OVER( 
         partition BY companycompanyid 
         ORDER BY stepcompanysteporder DESC), 
       companyidticketid, 
       companycompanyid, 
       stepcompanycompanyid, 
       stepcompanysteporder 
     FROM dbo.tablename) 
SELECT companyidticketid, 
     companycompanyid, 
     stepcompanycompanyid], 
     stepcompanysteporder 
FROM cte 
WHERE rn = 1; 

DEMO

結果:

COMPANYIDTICKETID COMPANYCOMPANYID STEPCOMPANYCOMPANYID STEPCOMPANYSTEPORDER 
210425   0BAD0261   0BAD0261     2 
136211   10B7E005   10B7E005     3 
155585   3A2078C5   3A2078C5     2 
193256   95AC74FB   95AC74FB     2 
+0

感謝Tim,JW擊敗了你,但我意識到我只是不理解在最後有= 1的概念...我不知道我現在想什麼,我明白了這個概念..大聲笑..感謝提姆! – 2013-04-09 15:22:23