下の図のような統計テーブルのような効果を得るには、テーブルから 2 つの日付間のプロトコル違反と期間の発生をカウントする必要があります。
期待される効果:
説明:
ご覧のとおり、違反テーブルに存在する「国」、「サイト」、および同じテーブル「違反」のDBに存在するプロトコル違反期間の「数」、「最大」、「最小」、および「平均」を選択する必要があります2 つの日付の間。したがって、カウントする必要があります。
- 国およびサイトごとの Violations テーブルに存在するプロトコル違反の発生数
- 国およびサイトごとのプロトコル違反の最小/最大/平均期間
2 つの異なる条件の下で:
- 発見日から報告日までの発生数
- 報告日から確認日までの発生数
データベース構造:
SQLFILDDLE で入手可能:ここを見てください
添付の SQLFIDDLE のコードには、より多くのテーブルとクエリがあることを追加しますが、現在、この問題には不要です。お気軽にご利用ください。良い方法があるので、古いクエリを削除しませんでした:
- 「-すべて-」と
- 「- 不明 -」値。-
違反表:
create table violations (
id long,
country varchar(20),
site varchar(20),
status_id int,
trial_id int,
discovered_date date,
reporded_date date,
confirmed_date date
);
サイト テーブル:
create table site (
id long,
site varchar(20)
);
私の最初の試み:
これは、コメント行を改善するために必要なクエリを含む新しいSQLFIDDLEです。
SELECT v.country as country, v.site as site,
COUNT(*) as N --,
--MAX(list of durations in days between discovered date to repored date on each violation by country and site) as "Maximum",
--MIN(list of durations in days between discovered date to repored date on each violation by country and site) as "Minimum",
--AVG(list of durations in days between discovered date to repored date on each violation by country and site) as "Mean"
FROM violations v
WHERE v.trial_id = 3
GROUP BY ROLLUP (v.country, v.site)
私のアイデアで抽象的なクエリを作成することができました。しかし、MAX、MIN、および AVG の正しいクエリを作成する際に問題が発生しました。ここでは、国およびサイトごとの違反ごとdiscovered date
に、期間のリストから最大/最小/平均値を選択する必要があります。reported date
私を手伝ってくれますか?