我为我的项目执行统计功能。我的订单表包含以下字段:
prouct_id
,amount
,order_date
。客户要求我执行自动缩放统计信息:我得到MIN(order_date)
produc_id
和当前日期以计算天数:
如果日期约~1个月==>按周显示产品统计数据
如果日期约〜1年==>按月显示产品统计数据
如果日期> = 2年==>按年显示产品统计数据
我希望能收到你们所有关于制作统计数据的想法和例子。
答案 0 :(得分: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