特定のオブジェクトの更新を取得するヒストリテーブルがあり、他の情報に加えて、この更新が行われた時刻が取得されます。私がしたいのは、ActionTaken
の列に対応するSELECT
MIN(LogDate)
です。SQL Serverで日付のグループを選択する
具体的には、履歴テーブルには、他の(より最新の)行ActionTaken = 1
を持っているかもしれないが、私は日付ActionTaken
をキャプチャしたい例1
となりました:これはうまく機能
SELECT MIN(LogDate) AS FirstActionDate
FROM HistoryTable
WHERE ID = 123
AND FirstActionTaken = 1
SELECT MIN(LogDate) AS SecondActionDate
FROM HistoryTable
WHERE ID = 123
AND SecondActionTaken = 1
SELECT MIN(LogDate) AS ThirdActionDate
FROM HistoryTable
WHERE ID = 123
AND ThirdActionTaken = 1
私は問題なく適切な日付を受け取ります。
SELECT MAX(LogDate) AS LastActionDate
FROM HistoryTable
WHERE ID = 123
AND LogDate IN
(
( SELECT MIN(LogDate) AS FirstActionDate
FROM HistoryTable
WHERE ID = 123
AND FirstActionTaken = 1 ),
( SELECT MIN(LogDate) AS SecondActionDate
FROM HistoryTable
WHERE ID = 123
AND SecondActionTaken = 1 ),
( SELECT MIN(LogDate) AS ThirdActionDate
FROM HistoryTable
WHERE ID = 123
AND ThirdActionTaken = 1 )
)
はこれも動作しますが、私はそれをこのようにやって嫌い:私はトラブルに実行している場合は、このグループからMAX(LogDate)
をselect
うとしています。私は前のステートメントを変数に保存して、それらからはただSELECT MAX()
にすることができました。確かに読みやすくなりますが、JOIN
の構文はこのクエリのように見えますか?
最初の3つのSELECT
ステートメントを、3つの日付をすべて返すものに結合する方法はありますか?私はSELECT
文を繰り返し、この結果セットからと(一見不要)なし(別の列など)の最新のLogDate
をつかむことができますどのように
?
編集:ここでは
は、私がこれまでに与えられた答えに関連して発見したいくつかのリンクです:
Hoこれらは似たような問題の解決策を探している人たちに役立ちます!
UNIONを使用し、次にIN – JamieD77