あいまいなタイトルのため、申し訳ありませんが、検索方法や質問が不明です。複数の列の集計に基づいて1行を返す方法
RowID FkId Rank Date ID1 A 1 2013-3-1 ID2 A 2 2013-3-2 ID3 A 2 2013-3-3 ID4 B 3 2013-3-4 ID5 A 1 2013-3-5
私は、各FkIdのために1行を返しますビューを作成する必要があります。
は、私たちがTableAのを考えてみましょう。行は最大ランクと最大日付でなければなりません。したがって、FkId "A"の場合、クエリは "ID3"の行を返します。
サブクエリを使用して1行を返すことができました。最初に私はMAX(ランク)を得てから、FkId &ランクでMAX(日付)グループを取得する別のクエリに参加します。
SELECT TableA.* (Select FkId, MAX(Rank) AS Rank FROM TableA GROUP BY FkId) s1 INNER JOIN (Select FkId, Rank, MAX(Date) AS Date FROM TableA GROUP BY FkId,Rank) s2 ON s1.FkId = s2.FkId AND s1.Rank = s2.Rank INNER JOIN TableA ON s2.FkId = TableA.FkId AND s2.Rank = TableA.Rank AND s2.Date = TableA.Date
同じ結果が得られるより効率的なクエリがありますか?探してくれてありがとう。
編集:最後の答えからID5が追加されました。私が通常のMAX(ランク)、MAX(日付)GROUP BY FKIdを試してみたら、 "A"の場合はAを得ます。 2; 2013-3-5。この結果はRowIdまで一致しません。
ランクのデータ型とは何ですか? –
最大ランクのすべての行から最大日付の行?または、最大の日付を持つすべての行から最大ランクの行? (これら2つは異なる場合があります) –
@AaronKurtzhals:数値 – csthopper