14

このクエリを使用して、2時間以上前のすべてのレコードを取得しようとしています。

$minutes = 60 * 2

SELECT COUNT(id) AS TOTAL, job_id 
  from tlb_stats 
 WHERE log_time >= DATE_SUB(CURRENT_DATE, INTERVAL $minutes MINUTE) 
GROUP BY job_id

最近のレコードのみを選択し、古いレコードをスキップします。変更log_time <= ...すると、古いものだけが選択され、新しいものはスキップされます。

私は何が間違っているのですか?

4

3 に答える 3

24

試す:

$minutes = 60 * 2

SELECT COUNT(`id`) AS `TOTAL`, `job_id` 
  FROM `tlb_stats` 
  WHERE `log_time` < DATE_SUB(NOW(), INTERVAL $minutes MINUTE) 
  GROUP BY `job_id`
  • バッククォートを使用してフィールドを引用します(「total」や「id」などの単語は、いつかMySQLで何かを意味する場合があります)
  • CURRENT_DATEの使用NOW()は、時刻を含まない2010-08-04を意味します
  • その日付より古い<エントリを取得するために使用します。
于 2010-08-04T00:09:29.170 に答える
1
SELECT * FROM `table_name` WHERE CURTIME() >= (`colname` + INTERVAL 120 MINUTE)

これcolnameは、レコードが作成されたときにタイムスタンプを追加した列です。

于 2015-03-07T10:20:23.660 に答える
0

この方法でそれを行うこともできます:

$minutes = 60 * 2

SELECT COUNT(`id`) AS `TOTAL`,
       `job_id` 
FROM `tlb_stats` 
WHERE `log_time` < NOW() - INTERVAL $minutes MINUTE
GROUP BY `job_id`
于 2019-04-24T22:18:56.583 に答える