MySQL ИНТЕРВАЛ Мин.

Я пытаюсь получить все записи старше 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 <= ..., он выбирает только старый и пропускает новый.

Что я делаю не так?


person Maximus    schedule 03.08.2010    source источник
comment
Вы все делаете правильно - это то, что должен делать этот запрос.   -  person zerkms    schedule 04.08.2010
comment
почему не выбирает старые записи?   -  person Maximus    schedule 04.08.2010
comment
@jason4: потому что вам нужны записи со временем меньше или равным (<=) текущему времени минус 2 минуты (т. е. сейчас: 22:06, 2 минуты назад — это 22:04, поэтому вы нужна запись с 22:03, что меньше 22:04).   -  person Wrikken    schedule 04.08.2010


Ответы (3)


Пытаться:

$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)
  • используйте NOW() для CURRENT_DATE просто означает 2010-08-04, не включая время
  • используйте <, чтобы получить записи старше этой даты.
person mvds    schedule 04.08.2010

SELECT * FROM `table_name` WHERE CURTIME() >= (`colname` + INTERVAL 120 MINUTE)

Здесь colname — это столбец, в который вы добавили временную метку времени создания записи.

person DeathRs    schedule 07.03.2015
comment
Порекомендуйте изменить выражение на WHERE colname <= ..., чтобы можно было использовать INDEX(... colname). - person Rick James; 06.09.2017

Вы также можете сделать это следующим образом:

$minutes = 60 * 2

SELECT COUNT(`id`) AS `TOTAL`,
       `job_id` 
FROM `tlb_stats` 
WHERE `log_time` < NOW() - INTERVAL $minutes MINUTE
GROUP BY `job_id`
person simhumileco    schedule 24.04.2019