これは、SQL サーバー ビューのすべての専門家にとって不十分な質問のように思えるでしょうが...
そのため、クライアントがレポート目的で必要とする小さなデータ セットがあります。私は彼らにレポートの要件を尋ねましたが、私のデータベースがより最適化される可能性があることを確認したのは今までではないことを認めなければなりません.
彼らが必要とするデータの 1 つは、実行された可能性のある 2 つのタスク間の時間差です。
select caseid, hy.createdate
from app_history hy
where hy.activityid in (303734, 303724)
これにより、ケース送信ごとに (編集後) 2 行が得られ、これらを測定する必要があります。アクティビティ 303734 は常に実行され、アクティビティ 303724 は実行される可能性があります。303734 と 303724 の各コンボが一致します。おそらく、ケースには、2 回目の提出時に、一致するペアを持つ 1 つの一致しない 303734 が含まれる可能性があります。これらを一致させることは、直感にかかっているかもしれません。良くない。ケース ID ごとに複数の提出がある可能性があり、その場合は、両方のアクティビティが後続のたびに実行されます。このテーブルに提出番号を書き込む方法はありません。
app_history テーブルは、userid、caseid、および activityid を外部キーとして保持します。PK は ID 列 ID です。
クエリを記述するより良い方法はありますか?
KM からの支援後:
select
c.id, c.submissionno, hya.caseid, hya.createtime, hyb.caseid, hyb.createtime
,CASE
WHEN hyb.caseid IS NOT NULL THEN DATEDIFF(mi,hya.createtime,hyb.createtime)
ELSE NULL
END AS Difference
from app_case c
inner join app_history hya on c.id = hya.caseid
left outer join app_history hyb on c.id = hyb.caseid
where hya.activityid in (303734) and hyb.activityid in (303724) order by c.id asc
これはほとんど機能します。
私は今この問題を抱えています:
460509|2|460509|15:15:39.000|460509|15:16:13.000|1
460509|2|460509|15:15:39.000|460509|15:18:13.000|3
460509|2|460509|15:17:52.000|460509|15:16:13.000|-1
460509|2|460509|15:17:52.000|460509|15:18:13.000|1
だから私は今、4つの行のそれぞれについて2つを比較して1つの行を取得しています...うーん、それは私が期待できる最高のものだと思います。:(