SQL Serverテーブルから最大日付の個別の行を選択しますか?
-
03-07-2019 - |
質問
テーブルの個別のレコードのセットと、すべての複製の最大日付を取得する必要があります。
例:
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
問題はgorupによるものであり、明確にうまくいかないことを前提としています。
編集:問題の原因となっている問題が見つかりました。クエリ結果は上記のようではなく、予想どおりでした。
解決
クエリまたは例の結果のいずれかが間違っています。説明することはできません。実際のSQLと実際の結果はどうですか?
いずれにしても、選択するのは3つのグループ化された列であり、集計であるため、 distinct
は必要ありません。私はこれを試したことがないので、これらの両方を使用する場合、おそらくいくつかの誤動作があります。 distinct
を削除しようとしましたか?何故そこに置いたのですか?
他のヒント
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)
(この順序で)にインデックスを作成すると、このクエリが大幅に改善されます。
このクエリを実行する場合:
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
クエリも機能するため、何かが実際に間違っているか、コードの正確な性質を適切に伝えていない。
所属していません StackOverflow