2015-12-17 49 views
6

情況:針對不同的客戶選擇不同的最大的ID

我們有獲得加載到我們的數據倉庫然而相反的,舊的負載被替換的文件月度,這些只是編譯於彼此頂部。這些文件會在幾天內加載。

所以在運行SQL腳本時,我們會得到重複的記錄,以便抵消這一點,我們在10-20運行一個工會「客戶」,然後選擇MAX(loadID)如

SELECT 
Customer 
column 2 
column 3 

FROM 
MyTable 

WHERE 
LOADID = (SELECT MAX (LOADID) FROM MyTable WHERE Customer= 'ASDA') 

UNION 


SELECT 
Customer 
column 2 
column 3 

FROM 
MyTable 

WHERE 
LOADID = (SELECT MAX (LOADID) FROM MyTable WHERE Customer= 'TESCO' 

上述聯盟將有要爲多個客戶完成,所以我一直在想,必須有更高效的方式。

我們無法在SELECT語句中使用MAX(LoadID)作爲可能的場景可能需要以下內容;

星期一:阿斯達,樂購,維特羅斯加載到數據倉庫(與LoadID爲124)

週二:森斯玻利裝在DW(與LoadID 125)

週三:新樂購裝在DW(與LoadID如126)

,所以我想LoadID 124阿斯達&維特羅斯,125個森斯玻利,& 126樂購

回答

6

使用窗口功能:

SELECT t.* 
FROM (SELECT t.*, MAX(LOADID) OVER (PARTITION BY Customer) as maxLOADID 
     FROM MyTable t 
    ) t 
WHERE LOADID = maxLOADID; 
+2

這個!!我們有一個勝利者!謝謝戈登。所以我問了兩個問題,都涉及到'PARTITION BY',所以猜猜我會讀嗎? – sam

0

對派生表的子查詢是否會滿足您的需求?

select yourfields 
from yourtables join 
(select customer, max(loadID) maxLoadId 
from yourtables 
group by customer) derivedTable on derivedTable.customer = realTable.customer 
    and loadId = maxLoadId 
+0

謝謝丹,這可能會工作,但戈登的長相更有效,所以我會建議持續 – sam

相關問題