を最適化する日/ SQLにつき最新のエントリを取得する:そのタイムスタンプを持つイベントの異なるオブジェクト用(ステータス)(ID)を記録し、次のデータベーステーブルを、与えられた
ID | Date | Time | Status
-------------------------------
7 | 2016-10-10 | 8:23 | Passed
7 | 2016-10-10 | 8:29 | Failed
7 | 2016-10-13 | 5:23 | Passed
8 | 2016-10-09 | 5:43 | Passed
私はプレーンを使用して結果表を取得したいですこのようなSQL(MS SQL):
ID | Date | Status
------------------------
7 | 2016-10-10 | Failed
7 | 2016-10-13 | Passed
8 | 2016-10-09 | Passed
「ステータス」の日に最新のエントリで、このオブジェクトの少なくとも1つのイベントが記録されていることを考えます。
私の現在のソリューションは、 "外部適用" と "TOP(1)" のように、この使用している:
SELECT DISTINCT rn.id,
tmp.date,
tmp.status
FROM run rn OUTER apply
(SELECT rn2.date, tmp2.status AS 'status'
FROM run rn2 OUTER apply
(SELECT top(1) rn3.id, rn3.date, rn3.time, rn3.status
FROM run rn3
WHERE rn3.id = rn.id
AND rn3.date = rn2.date
ORDER BY rn3.id ASC, rn3.date + rn3.time DESC) tmp2
WHERE tmp2.status <> '') tmp
私の知る限りのように、この外側の適用コマンドの機能を理解するよう:
For every id
For every recorded day for this id
Select the newest status for this day and this id
をしかし、私はパフォーマンスの問題に直面しているので、私はこの解決策は適切ではないと思う。任意の提案をどのようにこの問題を解決するか、SQLを最適化する方法?
グレート、この小さな変更は8倍高速動作するコードを作りました。どうもありがとう! – rcvd