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

を使用limitして、order by30 日以内の最も古い行を取得できます。

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 に答える