2

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

+----+----------+-------+------------+-------------+
| 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 天前的统计数据,如果没有找到,你可以找到较旧的”

谢谢 !

4

1 回答 1

3

您可以使用limitwithorder 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
于 2013-05-22T09:41:01.173 回答