IDごとに最新の結果を除いて、すべてのテーブルで「放棄」フラグを設定する必要があります。私はここで動作するクエリがあると思っていましたが、クエリでselectを実行すると不正な結果が出ます - 特定のIDに対して唯一の2つの結果の両方を選択した1つのケースを見ました。私は同じ正確なデータで複数の結果も得ています。 ここで何が間違っていますか?SQL IDごとに最新の結果をすべて選択する
select t.test_row_id, t.test_result_id, t.waived, t.pass, t.comment
from EV.Test_Result
join EV.Test_Result as t on EV.Test_Result.test_row_id = t.test_row_id and EV.Test_Result.start_time < t.start_time and t.device_id = 1219 and t.waived = 0
order by t.test_row_id
ここで私が実行したい実際のクエリです:
update EV.Test_Result
set waived = 1
from EV.Test_Result
join EV.Test_Result as t on EV.Test_Result.test_row_id = t.test_row_id and EV.Test_Result.start_time < t.start_time and t.device_id = 1219 and t.waived = 0
一意のタイムスタンプ(少なくとも日時を意味する)を返す日付列がある場合、これはMAX関数では簡単です。しかし、そうでなければ...あなたのテーブル構造にデザイン上の欠陥があるかもしれません。 –
datetime2というstart_time列があります。私もmaxを試しましたが、正しく書かれているのが面倒でした。例がありますか?私はSQLにあまり堪能ではありませんが、これは私の主要な仕事の説明ではありません(私は勉強しようとしていますが!)。 – Johonn
最後の提案は、インデントでクエリをフォーマットすることです。 SQLは文字列に含まれていないインラインスペースを無視します(SQLの文字列区切り文字です)。 –