【问题标题】:Schedule MySQL query every 24 hours; query table and store results in another table每 24 小时安排一次 MySQL 查询;查询表并将结果存储在另一个表中
【发布时间】:2015-06-02 02:06:04
【问题描述】:

我需要这个查询:

SELECT ItemID, Price 
        FROM table
        WHERE ItemID = %d
        GROUP BY Price
        ORDER BY COUNT(*) DESC LIMIT 1

-每天运行一次,并将结果存储在另一个表中,并带有查询的时间戳。

有没有一种方法可以自动查询所有可用的 ItemID 值?例如,如果有 20 个 ItemID 值可用,我需要 20 个单独的查询。

【问题讨论】:

    标签: mysql sql mysql-event


    【解决方案1】:

    您可以为此使用 mysql 事件调度程序。这是一个示例,您当前的查询将数据插入名为“new_table”的表中,从 3 月 28 日凌晨 3 点开始。

    DELIMITER $$
    
    CREATE 
        EVENT `daily_backup` 
        ON SCHEDULE EVERY 1 DAY STARTS '2015-03-28 03:00:00' 
        DO BEGIN
    
            INSERT INTO new_table (ItemID, Price, Time) 
                SELECT ItemID, Price, NOW()
                FROM table
                WHERE ItemID = %d
                GROUP BY Price
                ORDER BY COUNT(*) DESC LIMIT 1;
    
    
        END */$$
    

    您可以对其他查询执行相同的操作;它们可以放在同一个事件中,在END之前

    【讨论】:

    • 感谢您的回答,如何让此查询动态获取给定表中每个 ItemID 的所有最常出现的值,并将这些值存储在 new_table 中?如果可能,我想避免为每个 ItemID 创建一个新查询。
    • 好吧,您的查询应该对您在此表中的所有项目都执行此操作。如果您删除行 WHERE ItemID = %d 它只会备份整个表。
    • 我还需要删除其他内容吗?我只是想确定,现在的查询将结果限制在结果的第一行。我需要存储在这个新表中的每个 ItemID 最常出现的值。
    • 为什么不在定期运行之前测试查询本身并查看它返回的行?换句话说,尝试在BEGINEND 之间(但不包括)你想做的所有事情。您还可以测试该事件以确保它正在运行。除了DAY,您还可以使用其他参数。它将接受以下任何间隔:HOUR|MONTH|WEEK|DAY|MINUTE。玩它直到你感觉到它。这是文档:dev.mysql.com/doc/refman/5.1/en/create-event.html
    猜你喜欢
    • 2011-02-11
    • 1970-01-01
    • 1970-01-01
    • 2014-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-08
    • 1970-01-01
    相关资源
    最近更新 更多