2015-12-17 11 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ニューテスコは、DWにロード(:アズダ、テスコ、ウェイトローズDWにロード(124としてLOADID有する)

火曜日:セインズベリーは、(125としてLOADIDと)DWにロード

水曜日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

これ!私たちは勝者を持っています!ありがとうゴードン。だから私は2つの質問をして、両方のパーティションに関連するので、私は上に読んでいるだろうと推測する! – 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

Danさん、ありがとうございます.Gordonの方がより効率的に見えるので、私はそれをpersoanlly – sam

関連する問題