1

私は自分のプロジェクトの統計機能を実行します。私はいくつかのフィールドを持つ注文テーブルを持っています:

  • prouct_id
  • amount
  • order_date

顧客から、自動スケール統計を次のように実行するように求められました。日数を計算するためMIN(order_date)に、のと現在の日付を取得します。produc_id

  • 約1か月の日数==>週ごとの製品の統計を表示する場合

  • 約1年の日==>月ごとの製品の統計を表示する場合

  • 日数>=2年==>の場合は年ごとの製品の統計を表示します

上記のような統計の作成について、皆様からのアイデアや例をお受けいただければ幸いです。

4

1 に答える 1

1

これがRDBMSとは何かを指定していません。それで、それがSQL Serverであると仮定しましょう、そしてあなたはこれを行うことができます:

;WITH MinDates AS
(
    SELECT 
      produc_id,
      MIN(order_date) order_date
    FROM products
    GROUP BY produc_id
), DatesWithIntervals AS
(
    SELECT 
      product_id,
      order_date,
      CASE 
        WHEN ABS(DATEDIFF(dd, order_date, GETDATE())) < 31      THEN 1
        WHEN ABS(DATEDIFF(dd, order_date, GETDATE())) < 365     THEN 2
        WHEN ABS(DATEDIFF(dd, order_date, GETDATE())) < 365 * 2 THEN 3 
        ELSE 4
      END "Interval"
    FROM MinDates
)
SELECT
  product_id,
  order_date
  ...
FROM DatesWithIntervals 
--Do your statics here

計算する統計を指定していません。ただし、最後のcteを使用して、実行したい統計を実行できるはずです。DatesWithIntervalsフィールドに応じてInterval、練習として残しておきます。

編集: MySQLの場合、これらすべてを次CTEのようなサブクエリに置き換えるだけです。

SELECT
  product_id,
  order_date
      ...
FROM
(
    SELECT 
      product_id,
      order_date,
      CASE 
        WHEN ABS(DATEDIFF(dd, order_date, GETDATE())) < 31      THEN 1
        WHEN ABS(DATEDIFF(dd, order_date, GETDATE())) < 365     THEN 2
        WHEN ABS(DATEDIFF(dd, order_date, GETDATE())) < 365 * 2 THEN 3 
        ELSE 4
      END "Interval"
    FROM
    (
         SELECT 
          produc_id,
          MIN(order_date) order_date
         FROM products
         GROUP BY produc_id  
    ) MinDates
) DatesWithIntervals 
--Do your statics here
于 2012-11-20T08:58:28.623 に答える