Find a record between two dates MySQL - mysql

I am attempting to find records in my DB that's end_date is within 24 hours of the current time.
Here is the query I am currently running
select *
FROM record r
WHERE NOW() BETWEEN r.end_date AND DATE_ADD(r.end_date, INTERVAL -1 DAY);
This doesn't bring back any of the records with an end_date within 24 hours, am I using the DATE_ADD function wrong?

I think this is what you need:
select *
FROM record r
where
r.end_date >= date_add(now(), INTERVAL -1 DAY)

Related

Selecting records from last 24 hours - MySQL

I'm trying to run this MySQL command to select records with a lead_submitted date in the last 24 hours.
The issue is it grabs future dates too (fyi I'm delaying some leads so basically set a date in the future for these to be processed).
For example, if I run the command:
SELECT id, lead_submitted, processed FROM leads WHERE (lead_submitted > now() - INTERVAL 24 HOUR) ORDER BY id DESC;
I get this result:
10 | 2022-10-04 13:24:13 | N
~
Why is this? I just want to select records from the last 24h.
FTR, when I run SELECT NOW() as now; I get 2022-09-30 14:00:12
Any help would be greatly appreciated.
EDIT:
I've found this works as a workaround, but it feels nasty:
SELECT id, lead_submitted, processed FROM leads WHERE (lead_submitted > now() - INTERVAL 24 HOUR) AND (lead_submitted < now() + INTERVAL 1 SECOND) AND processed = 'N' ORDER BY id DESC LIMIT 1;
You probably want to use:
SELECT id, lead_submitted, processed
FROM leads
WHERE lead_submitted between (now() - INTERVAL 24 HOUR) and now()
ORDER BY id DESC;

MySQL - How to find records for yesterday when timestamp is part of date

My MySQL table stores records with a date/time stamp. I am wanting to find records from the table that were created yesterday (as in have a creation date of yesterday - regardless of what the timestamp portion is)
Below is what a db record looks like:
I have tried the following select (and a few other variations, but am not getting the rows with yesterday's date.
SELECT m.meeting_id, m.member_id, m.org_id, m.title
FROM meeting m
WHERE m.create_dtm = DATE_SUB(CURDATE(), INTERVAL 1 DAY)
Not exactly sure how I need to structure the where clause to get meeting ids that occurred yesterday. Any help would be greatly appreciated.
A naive approach would truncate the creation timestamp to date, then compare:
where date(m.create_dtm) = current_date - interval 1 day
But it is far more efficient to use half-open interval directly against the timestamp:
where m.create_dtm >= current_date - interval 1 day and m.create_dtm < current_date
You can try next queries:
SELECT
m.meeting_id, m.member_id, m.org_id, m.title, m.create_dtm
FROM meeting m
-- here we convert datetime to date for each row
-- it can be expensive for big table
WHERE date(create_dtm) = DATE_SUB(CURDATE(), INTERVAL 1 DAY);
SELECT
m.meeting_id, m.member_id, m.org_id, m.title, m.create_dtm
FROM meeting m
-- here we calculate border values once and use them
WHERE create_dtm BETWEEN DATE_SUB(CURDATE(), INTERVAL 1 DAY) AND DATE_SUB(CURDATE(), INTERVAL 1 SECOND);
Here live fiddle: SQLize.online

Find records from MySQL which is updated within last hour but not created within last hour

I want to query from MySQL where posts will come only which is updated within last hour but not created in last hour.
Here is my MySQL query:
SELECT *
FROM
(SELECT *
FROM posts
WHERE (updated_at >= (NOW() - INTERVAL 30 MINUTE))) AS A
WHERE (created_at < DATE_SUB(NOW(), INTERVAL 60 MINUTE))
But this query doesn't give me right result.
I am attaching sample posts in CSV and adding result output from this query.
Sample: []
Query Output: []
I think you just need both conditions in a WHERE clause:
SELECT *
FROM posts
WHERE
updated_at >= DATE_SUB(NOW(), INTERVAL 1 HOUR) AND
created_at < DATE_SUB(NOW(), INTERVAL 1 HOUR);

Add Week Interval to Date Query

I have the following SQL Query which delivers data well for current date, how can i set this query to query a week of data from curdate?
SELECT count( * ) as today_total_4
FROM cdr
WHERE dcontext='ext-queues' AND DATE(`calldate`) = DATE(CURDATE())
Many Thanks.
You can use a DATE_ADD function to get the date a week from now. (Either forward or back)
http://www.w3schools.com/sql/func_date_add.asp
SELECT count( * ) as today_total_4
FROM cdr
WHERE dcontext='ext-queues' AND DATE(`calldate`) = DATE_ADD(CURDATE(), INTERVAL 7 DAY)
Depending on your query requirements you can calculate 7 days back using:
DATE_ADD(CURDATE(), INTERVAL -7 DAY)
If you wanted your query to be everything since a week ago, then you'd change your query to have the following where clause:
WHERE dcontext='ext-queues' AND DATE(calldate) > DATE_ADD(CURDATE(), INTERVAL -7 DAY)
SELECT count( * ) as today_total_4
FROM cdr
WHERE dcontext='ext-queues' AND WHERE WEEK(`calldate`) = WEEK(DATE(CURDATE()))

Fetch rows with DATE

I am storing rows with MySQL using a date col. Everytime I insert a new row I use date=CURDATE() .
Is there anyway I can run a SELECT statement that selects all rows that were created within the last 24 hours?
Joel
Try this:
SELECT * FROM table WHERE date >= DATE_SUB(NOW(), INTERVAL 24 HOUR))
You can use the sub_date() function with interval to make a range of dates between now and 24 hours ago:
SELECT * FROM
table WHERE
date_field BETWEEN curdate() AND DATE_SUB(curdate(), INTERVAL 1 DAY);