2

試用のために、国とサイトごとに 2 つの日付間の日数の最小/最大/平均を選択する正しい SQL クエリを作成するのに問題があります。

私のクエリ:

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)

これは、コメント行を改善するために必要なデータ構造とクエリを備えた私のSQLFIDDLEです。

私を手伝ってくれますか?

4

2 に答える 2

5

Oracle では、日付はオフセットとして格納されるため、単純に一方の日付をもう一方の日付から差し引くことができます。詳細については、日付演算を参照してください。

SQLフィドル

SELECT v.country as country, v.site as site,
  COUNT(*) as N,
  MAX(reporded_date - discovered_date) as "Maximum",
  MIN(reporded_date - discovered_date) as "Minimum",
  AVG(reporded_date - discovered_date) as "Mean"
FROM violations v
WHERE v.trial_id = 3
GROUP BY ROLLUP (v.country, v.site)

あなたが提供したテストデータは常に1日離れていたことに注意してください.

于 2013-03-14T11:25:35.520 に答える
0

報告された日付と発見された日付の差を集計関数に入れるだけです。

SELECT v.country as country, v.site as site,
  COUNT(*) as N,
  MAX(reported_date-discovered_date) as "Maximum",
  MIN(reported_date-discovered_date) as "Minimum",
  AVG(reported_date-discovered_date) as "Mean"
FROM violations v
WHERE v.trial_id = 3
GROUP BY ROLLUP (v.country, v.site)

あなたが提供した SQLFiddle データは実際には違いを示さないため、更新されたバージョンを次に示します。

于 2013-03-14T11:32:42.457 に答える