我有一个类似于以下内容的小统计表:
+----+----------+-------+------------+-------------+
| 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天前的统计数据,如果没有找到,你可以找到较旧的”
谢谢!
最佳答案
您可以将 limit
与 order 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
关于Mysql 选择 1 个月前保存的记录,如果没有找到,则选择较旧的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16688449/