产品统计

时间:2012-11-20 08:40:28

标签: php mysql sql report

我为我的项目执行统计功能。我的订单表包含以下字段:

  • prouct_id
  • amount
  • order_date

客户要求我执行自动缩放统计信息:我得到MIN(order_date) produc_id和当前日期以计算天数

  • 如果日期约~1个月==>按周显示产品统计数据

  • 如果日期约〜1年==>按月显示产品统计数据

  • 如果日期> = 2年==>按年显示产品统计数据

我希望能收到你们所有关于制作统计数据的想法和例子。

1 个答案:

答案 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