2

テーブルの個別のレコードのセットと、すべての重複の最大日付を取得する必要があります。

元:

Select distinct a,b,c, Max(OrderDate) as maxDate
From ABC
Group By a,b,c

問題は、異なる日付ごとにレコードを取得することです。

元:

aaa, bbb, ccc, Jan 1 2009
aaa, bbb, ccc, Jan 28 2009

どうすればこれを制限できるので、最終的には次のようになります:

aaa, bbb, ccc Jan 28 2009

問題は、仲が良くないことによるグループであると思います。

編集:問題の原因となっている問題が見つかりました。クエリの結果は上記ではなく、期待どおりでした。

4

3 に答える 3

4

あなたが説明したことは不可能であるため、クエリまたは結果の例のいずれかに問題があります。実際のSQLと実際の結果はどうですか?

いずれにせよ、選択しているのはグループ化された 3 つの列と集計だけであるため、そこは必要ありませんdistinct。したがって、定義により、すべての個別の行が作成されます。私はこれを試したことがないので、おそらく両方を使用すると誤動作が発生する可能性があります。を削除しようとしましたdistinctか? そこに置いた理由は何ですか?

于 2009-04-30T13:22:14.357 に答える
3
WITH q AS (
        SELECT  abc.*, ROW_NUMBER() OVER (PARTITION BY a, b, c ORDER BY orderDate DESC) AS rn
        FROM    abc
        )
SELECT  *
FROM    q
WHERE   rn = 1

(この順序で) にインデックスを設定する(a, b, c, orderDate)と、このクエリが大幅に改善されます。

于 2009-04-30T13:22:33.873 に答える
1

このクエリを実行すると:

select 'ab' as Col1, 'bc' as col2, 'cd' as col3, getdate() as Date
into #temp
insert into #temp
values ('ab','bc','cd','1/15/09')
insert into #temp
values ('aa','bb','cc','1/1/09')
insert into #temp
values ('aa','bb','cc','1/22/09')

select col1,col2,col3,max(date)
from #temp
group by col1,col2,col3

あなたは戻ってくるはずです:

aa、bb、cc、2009-01-22 00:00:00.000
ab、bc、cd、2009-04-30 09:23:07.090

クエリも同様に機能するため、何かが本当に間違っているか、コードの正確な性質を適切に伝えていません。

于 2009-04-30T13:29:45.713 に答える