【问题标题】:Mysql select record saved 1 month ago or the older one if none foundMysql 选择 1 个月前保存的记录或较旧的记录,如果没有找到
【发布时间】:2013-05-22 09:38:22
【问题描述】:

我有一个类似的小型统计表:

+----+----------+-------+------------+-------------+
| id | stat_key | value | created_at | customer_id |
+----+----------+-------+------------+-------------+

每天,一个 cron 执行一些计算并为每个客户保存统计信息。

现在我想检索 30 天前的统计信息,或者如果客户是新客户,则可以使用旧的统计信息,只要它少于 30 天前。

所以我尝试执行以下查询,但对于 30 天以上的客户,返回的始终是所有时间的旧统计信息:

SELECT * 
FROM stat_table 
WHERE customer_id = 1 AND stat_key = 'some_key' 
HAVING (DATE(created_at) = DATE(NOW() - INTERVAL 30 DAY) 
       OR DATE(created_at) = DATE(MIN(created_at)));

有没有办法做到这一点? "给我 30 天前的数据,如果没有找到,你可以找到旧的"

谢谢!

【问题讨论】:

    标签: mysql sql date


    【解决方案1】:

    您可以使用 limitorder by 来检索不超过 30 天的最旧行:

    SELECT  * 
    FROM    stat_table 
    WHERE   customer_id = 1 
            AND stat_key = 'some_key' 
            AND created_at > NOW() - INTERVAL 30 DAY
    ORDER BY
            created_at
    LIMIT   1
    

    【讨论】:

    • 应该是AND created_at < NOW()... 还是我的咖啡还不够?
    • @tombom:该行最多应该存在 30 天。你还没有喝足够的咖啡:)
    猜你喜欢
    • 1970-01-01
    • 2020-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-21
    • 1970-01-01
    相关资源
    最近更新 更多