Mysql 使用Group By将新日期从一个表选择到另一个表中
我有两张桌子: 命令 购买日期这是“日期时间”类型 商品价格 sku 其他数据 按日期列出的总销售额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
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服务器瓶颈的唯一不可替代的资源。在你确定瓶颈是真的之前,再利用时间是没有意义的。可能不是。