2016-03-22 9 views
0

MS SQLクエリの作成に慣れていて、RecordVersionという名前の最も高いフィールドを持つレコードのみを表示しようとしています。 、クエリのMAX結果のみを表示する方法

PriceProgramID EffectiveDateTime Price PLU Descr LastUpdate LastUpdatedBy RecordVersion PriceScheduleUniqueID 

1 2016-03-22 00:00:00.000 35.00 SLS10100103    Architecture Adult from NP POS 2015-01-22 07:53:15.000 GX70,83  9 569 

1 2016-03-22 00:00:00.000 32.00 SLS10100103    Architecture Adult from NP POS 2014-02-25 16:22:46.000 GX70,83  5 86180 

結果の最初の行はRecordVersionがされている9と5である二行目の結果:

SELECT   
    PriceCalendars.PriceProgramID, 
    PriceCalendars.EffectiveDateTime, 
    PriceSchedules.Price, 
    PriceSchedules.PLU, 
    items.Descr, 
    PriceSchedules.LastUpdate, 
    PriceSchedules.LastUpdatedBy, 
    PriceSchedules.RecordVersion, 
    PriceSchedules.PriceScheduleUniqueID 
FROM    
    PriceCalendars 
    INNER JOIN PriceSchedules ON PriceCalendars.PriceProgramID = PriceSchedules.PriceProgramID 
    INNER JOIN items ON PriceSchedules.PLU = items.PLU 
WHERE   
    (PriceSchedules.PLU = 'SLS10100103') 
    AND (PriceCalendars.EffectiveDateTime = '2016-03-22') 

ここにあるクエリ結果: 以下は表示されますが、すべてのレコードを作品クエリです私は、RecordVersion = 9を返すより高いレコードを表示したいだけです。

私はMAXコマンドを使用しようとするたびに、エラーまたはグループを取得し、すべての例を試してみましたが、動作するようです。 MS SQL 2012 感謝を使用して

は、 ケン

+1

は複写のようです食べた。私はこの事件の多くを見てきました。 http://stackoverflow.com/questions/28984670/how-to-get-latest-record-or-record-with-max-corresponding-date-of-all-distinct-v – FLICKER

+0

この2つを同じにするとあなたはそのうちの1つをしたいですか? PriceProgramID、PLU Descr、PriceScheduleUniqueID(またはそれらのすべての組み合わせ)? – Ralph

+0

'SELECT TOP 1'と' ORDER BY RecordVersion DESC'を使ってみましたか?これはあなたのユースケースには十分かもしれませんが、わかりません。 –

答えて

1

RecordVersion DESCによって返される行を注文して、あなたの問題を解決しようとすると、その後、ちょうど最初の行を選択し、次のクエリを試してみてください。列によって

SELECT TOP 1  
    PriceCalendars.PriceProgramID, 
    PriceCalendars.EffectiveDateTime, 
    PriceSchedules.Price, 
    PriceSchedules.PLU, 
    items.Descr, 
    PriceSchedules.LastUpdate, 
    PriceSchedules.LastUpdatedBy, 
    PriceSchedules.RecordVersion, 
    PriceSchedules.PriceScheduleUniqueID 
FROM    
    PriceCalendars 
    INNER JOIN PriceSchedules ON PriceCalendars.PriceProgramID = PriceSchedules.PriceProgramID 
    INNER JOIN items ON PriceSchedules.PLU = items.PLU 
WHERE   
    (PriceSchedules.PLU = 'SLS10100103') 
    AND (PriceCalendars.EffectiveDateTime = '2016-03-22') 
ORDER BY 
    RecordVersion DESC 
+0

これは完璧に働いていただきありがとうございます。 –

+0

ようこそStackOverflowへ!自分の答えを「受け入れられた」とマークすると、2つの評判ポイントが追加されます。 #SOReadyToHelp –

0

すべてのグループが選択にする必要があり、それは、任意の凝集が適用できるように、グループに残りの列を配置し、作品によってグループby.Howグループのルールが列によってグループのすべての異なる組み合わせのためにあるのですあなたのケースでは、列ごとにテスト日付が一意であることが分かりません。希望する出力を与える行番号を使用するバージョンが1つあります。

最終更新日までの注文は、注文して番号を割り当てる

WITH CTE 
AS 
( 
    SELECT PriceCalendars.PriceProgramID, 
    PriceCalendars.EffectiveDateTime, 
    PriceSchedules.Price, 
    PriceSchedules.PLU, 
    items.Descr, 
    PriceSchedules.LastUpdate, 
    PriceSchedules.LastUpdatedBy, 
    PriceSchedules.RecordVersion, 
    PriceSchedules.PriceScheduleUniqueID, 
    ROW_NUMBER() OVER (PARTITION BY PriceSchedules.RecordVersion ORDER BY PriceSchedules.LastUpdatedBy) AS RN 
FROM    
    PriceCalendars 
    INNER JOIN PriceSchedules ON PriceCalendars.PriceProgramID = PriceSchedules.PriceProgramID 
    INNER JOIN items ON PriceSchedules.PLU = items.PLU 
WHERE   
    (PriceSchedules.PLU = 'SLS10100103') 
    AND (PriceCalendars.EffectiveDateTime = '2016-03-22') 
    ) 
    SELECT * FROM CTE WHERE RN=1 
+0

私はあなたのクエリの 'PARTITION BY'が' RecordVersion'ではなく、 'PriceProgramID'カラムを使うことを望んでいると思います。 –

+0

かもしれませんが、私はレコードのバージョンがユニークであると思っています。より多くの回答を得る最良の方法は、いくつかのテストデータと期待される出力を提供することです。これまでに試したクエリと一緒に – TheGameiswar

+0

ありがとうございます。 1行だけのクエリからの応答が必要です。まだ助けてくれてありがとう。 –

関連する問題