Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

MySQL Select rows where timestamp column between now and 10 minutes ago

Tags:

sql

mysql

I have a timestamp column that auto updates on insert/update.

I want to get the rows that have been updated within the last 10 minutes.

SELECT
     *
FROM
     status
WHERE
     code='myCode'
AND
     'stamp_updated' 
     BETWEEN
     NOW()
     AND
     DATE_ADD(NOW() , INTERVAL - 10 MINUTE)
ORDER BY 
     stamp_updated DESC
LIMIT 1
like image 385
krx Avatar asked Aug 13 '10 21:08

krx


People also ask

How do you select all records that are 10 minutes within a TIMESTAMP in MySQL?

SELECT col1, col2, col3 FROM table WHERE DATE_ADD(last_seen, INTERVAL 10 MINUTE) >= NOW();

How do I query between two dates using MySQL?

select *from yourTableName where yourColumnName between 'yourStartingDate' and curdate().


3 Answers

Use:

  SELECT *
    FROM status
   WHERE code = 'myCode'
     AND `stamp_updated` BETWEEN DATE_SUB(NOW() , INTERVAL 10 MINUTE)
                           AND NOW()
ORDER BY stamp_updated DESC
   LIMIT 1

Order in the BETWEEN operator matters - you had it backwards.

like image 53
OMG Ponies Avatar answered Nov 02 '22 14:11

OMG Ponies


 ... 'stamp_updated' BETWEEN NOW() - INTERVAL 10 MINUTE AND NOW()  ...
like image 21
a1ex07 Avatar answered Nov 02 '22 14:11

a1ex07


Not sure why you're using the between construct. MySQL can use logical operators on dates, and usually significantly faster. I would use this:

select * 
  from status 
  where code='myCode' 
        and stamp_updated >= DATE_SUB(NOW(), INTERVAL 10 MINUTE) 
  order by stamp_updated desc 
  limit 1;
like image 42
Gregory Patmore Avatar answered Nov 02 '22 14:11

Gregory Patmore