Mysql 使用Group By将新日期从一个表选择到另一个表中

Mysql 使用Group By将新日期从一个表选择到另一个表中,mysql,datetime,aggregate-functions,Mysql,Datetime,Aggregate Functions,我有两张桌子: 命令 购买日期这是“日期时间”类型 商品价格 sku 其他数据 按日期列出的总销售额 INSERT INTO total_sales_by_date (date,total_sales) SELECT DATE(purchase_date) AS date, SUM(item_price) AS total_sales FROM orders where ( SELECT IF( max(date) is null,'1900-01-01',ma

我有两张桌子:

命令

购买日期这是“日期时间”类型 商品价格 sku 其他数据 按日期列出的总销售额

INSERT INTO total_sales_by_date (date,total_sales)
SELECT
    DATE(purchase_date) AS date,
    SUM(item_price) AS total_sales
  FROM orders
  where ( 
    SELECT IF( max(date) is null,'1900-01-01',max(date) + interval 1 day)
    FROM total_sales_by_date
    ) < purchase_date
  AND purchase_date < date(now() - interval 1 day)
  GROUP BY date;
日期 总销售额 orders表每天都会通过API进行更新。total_sales_by_date表仅将每个sku的所有销售额相加,并按日期将其分组,得出该日期所有sku/销售额的总和。我正在使用此查询:

INSERT INTO total_sales_by_date SELECT DATE(purchase_date) AS date, SUM(item_price) AS total_sales FROM orders GROUP BY date
为了提高数据库效率,我希望每天只使用API进入第一个表的新销售数据更新第二个表。ie-我不想重新插入第二个表中已有的旧数据


此外,我还想创建一个过程,每天在凌晨4点或其他时间运行该查询。

如果您在当地时间午夜后的某个时间运行以下查询,您将得到所需的结果。我建议在凌晨3点以后运行,这样你就不会在夏令时开始或结束的日子出现异常

INSERT INTO total_sales_by_date 
SELECT DATE(purchase_date) AS date, 
       SUM(item_price) AS total_sales
  FROM orders
 WHERE purchase_date >= CURDATE() - INTERVAL 1 DAY
   AND purchase_date < CURDATE()
 GROUP BY DATE(purchase_date)

然后,每当您需要total_sales中的行时,MySQL将从订单中获取它们。如果您在订单表上定义了购买日期、商品价格的复合索引,则使用该视图不会对性能造成太大影响。

您可以使用类似的查询。你可以想跑多久就跑多久。它只插入到昨天的订单,并按日期检查总销售额的最大日期

INSERT INTO total_sales_by_date (date,total_sales)
SELECT
    DATE(purchase_date) AS date,
    SUM(item_price) AS total_sales
  FROM orders
  where ( 
    SELECT IF( max(date) is null,'1900-01-01',max(date) + interval 1 day)
    FROM total_sales_by_date
    ) < purchase_date
  AND purchase_date < date(now() - interval 1 day)
  GROUP BY date;

哇。这很有趣。因此,游戏的最终目的是用Excel或基于web的平台来绘制这些东西的图表。考虑到这一点,使用视图会在服务器上创建比下载以前填充的表更多的资源吗?我猜您的意思是消耗更多的资源。我希望查询可以创建更多的资源。:-:-不明显,除非您每小时运行此图表程序多次,并且订单表中至少有100000行。无论如何,通常的做法是使用简单的SQL工具查询、视图等来完成工作。如果发现有性能问题,则添加索引。如果这不起作用,你可以使用你在这里展示的大锤-物化视图。你在这里的策略是利用你的时间,这是克服MySQL服务器瓶颈的唯一不可替代的资源。在你确定瓶颈是真的之前,再利用时间是没有意义的。可能不是。