1

InformixデータベースにSQLクエリを記述して、年/月/週/日/時間でグループ化された結果を返します(それぞれに5つのSQLクエリを記述します)。

私が持っているシナリオは次のとおりです:

  • コンテストテーブル(コンテスト名、説明、開始日、提出日、レビュー日、結果日に関する情報を含む)、提出テーブル(コンテストへの提出、提出ID、提出者IDなど)の2つのテーブルがあります。提出日..etc)。
  • 私が達成したいのは、提出物を日ごとにグループ化して(sqlは、毎日提出された提出物の数に関する統計を返します)、週ごと、月ごと、または年ごとなどに、コンテストの進行状況を取得することです。

私はInformixDBでSQLクエリを作成することに精通していますが、そのようなシナリオは私にとって非常に複雑であり、その方法を理解できませんでした。

上記のシナリオを実現するサンプルクエリを教えてください。

4

3 に答える 3

3

これがあなたが必要としているものと正確に一致しない場合、それはあなたに何らかの方法をもたらすか、あなたにいくつかのアイデアを与えるかもしれません:

SELECT contest_id, YEAR(submission_date) AS submission_period, COUNT(*),
       "Y" AS sub_type
  FROM submissions
  GROUP BY 1, 2
UNION ALL
SELECT contest_id, MONTH(submission_date) AS submission_period, COUNT(*),
       "M" AS sub_type
  FROM submissions
  GROUP BY 1, 2
UNION ALL
SELECT contest_id, DAY(submission_date) AS submission_period, COUNT(*),
       "D" AS sub_type
  FROM submissions
  GROUP BY 1, 2
ORDER BY 1, 4, 2

ただし、月を個別に表示するのではなく、月ごと、または週を表示する場合は、データウェアハウスアプリケーションで使用されるような「時間ディメンション」の作成を検討することを強くお勧めします。これは、次のように見える毎日のレコードを含むテーブルです。

Date         Year   Month     Week      Quarter  Day    MthName
2013-01-01 | 2013 | 2013-01 | 2013W01 | 2013Q1 | Tues | January
2013-01-02 | 2013 | 2013-01 | 2013W01 | 2013Q1 | Wed  | January
..
2013-03-20 | 2013 | 2013-03 | 2013W12 | 2013Q1 | Wed  | March
..
2013-05-01 | 2013 | 2013-05 | 2013W18 | 2013Q2 | Wed  | May

提出日をこのテーブルに参加させることで、要件に合った列でグループ化できます。

上級者向けのヒント:これらのヘッダーにラベルを付けたものとは呼ばないでください。予約語を使用すると、問題が発生します:-)

于 2013-03-24T08:07:28.600 に答える
0

ドキュメントによると、informixにはこれを行う機能があります。日付コンポーネントごとに同じ関数を使用しないでください。

皮肉なことに、時間を取得するには、日付関数--to_char()を使用します。その時間に適切なマスクがあるかもしれません。そうでない場合は、部分文字列を使用する必要があります。

日付コンポーネントには、時間コンポーネントyear()、month()、およびday()またはweekday()のいずれかを使用します。あなたはその週は運が悪いかもしれません。

次のリファレンスページを参照してください。

編集

これは、年関数を使用した簡単な例です。

select year(resultdate) resultyear, count(*) results
from etc
group by year(resultdate)
于 2013-03-23T17:30:31.083 に答える
0

このクエリを実行すると、「エラー:構文エラーが発生しました。(状態:37000、ネイティブコード:FFFFFF37)」というエラーが表示されます。groupbyを列番号に変更する必要があります。

resultYearとしてyear(resultdate)を選択し、caa44340 group by 1からresultCountとしてcount(*)を選択します。

それが正しく実行されるために!

于 2016-10-21T18:37:59.333 に答える