これが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