2017-01-18 8 views
1

SQL Server 2014およびManagement Studioを使用しています。私が何をやっているのか説明しよう。複数のグループを持つ最新のレコードを取得するSQLクエリ

私は、次の(非常に単純化された)に似てテーブルを持っている

enter image description here

私はまあ、グローバルIDがある場合は、各パラメータのための最も現在のレコードをつかむだろうクエリを作成したいです同じ。私は次のようになりたいもの:

enter image description here

私は偉大なSQLジョッキーされていないで、私は少しの助けをしたいと思います。

私は見つけることができる最も近いものは、グローバルIDが一致していればそれだけで、ほとんどの現在のレコードをつかむだろうので、考慮にパラメータフィールドを取らない以下の通りであった:

SELECT TOP 1000 
    [OBJECTID], SampleDate, 
    Collector, Parameter, Result, Unit, 
    WellGlobalID, GlobalID 
FROM 
    WellSamples 
WHERE 
    SampleDate IN (SELECT MAX(SampleDate) 
        FROM WellSamples 
        GROUP BY WellGlobalID); 
+0

のいずれか(複数存在することができるかどうかに依存する)ROW_NUMBER()またはランク()とパラメータでパーティション/ globalidサンプルの日付を降順で並べ替えます。例えば'select *、row_number()を上回るselect(パラメータごとのパーティション、wellglobalid order by sampledate desc)rn from wellsamples)rn = 1;'この全く同じ質問をする何百もの質問があります。 。 – ZLK

答えて

3

ROW_NUMBER機能を使用してください。ウィンドウ関数(ROW_NUMBER)はwhere句で使用することはできませんので、

SELECT * 
FROM (
    SELECT w.*, 
     ROW_NUMBER() OVER(PARTITION BY parameter,wellglobalid 
         ORDER BY sampledate DESC) as RN 
    FROM WellSamples w 
) x 
WHERE RN = 1 
+0

驚くばかりのソース、ちょうどそれを試して、それは働いた!どうもありがとうございます。あなたは私にいくつかの時間を救った。 – Peter

1

ROW_NUMBERは私の解決策になるhttps://msdn.microsoft.com/en-us/library/ms186734.aspx

SELECT 
    [OBJECTID] 
    ,SampleDate 
    ,Collector 
    ,Parameter 
    ,Result 
    ,Unit 
    ,WellGlobalID 
    ,GlobalID 
FROM ( 
    SELECT 
     [OBJECTID] 
     ,SampleDate 
     ,Collector 
     ,Parameter 
     ,Result 
     ,Unit 
     ,WellGlobalID 
     ,GlobalID 
     ,ROW_NUMBER() OVER (PARTITION BY Parameter, WellGlobalID ORDER BY  SampleDate DESC) AS [ROW_NUM] 
    FROM WellSamples 
    ) tbl 
WHERE ROW_NUM = 1 

あなたサブクエリする必要があります。

0

サブクエリでもこれを実行できます。まず、各パラメータのための最新の日付を検索し、残りのデータを結合する、このような:

SELECT w.parameter, w.sampledate, w.result, w.wellglobalid 
FROM wellsamples w 
INNER JOIN 
(SELECT MAX(sampledate) AS mxdate, parameter 
FROM wellsamples 
GROUP BY parameter) sub 
ON w.parameter = sub.parameter 
AND w.sampledate = sub.mxdate 
関連する問題