?
Solved

Delete Range of dates in MySQL

Posted on 2014-01-06
7
Medium Priority
?
351 Views
Last Modified: 2014-01-06
I have searched the internet and copied in at least 7 solutions that are advertised around, but I simply cannot get it to work.  

Problem:  I have 100,000 rows in a database - all with a date field populated.  I want to delete all rows if the date is older than 14 days.  Among many attempts, this was my last, but the SQL is bad.  Any thoughts for a legit solution that actually works :)

DELETE * FROM hours WHERE ADJAPPLYDTM < DATE_SUB( 2013-12-30, INTERVAL 14 DAY )

I would paste all the others I tried, but it wouldn't do any good at this point since they didn't work and I don't remember them.
0
Comment
Question by:weklica
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 4
  • 3
7 Comments
 

Author Comment

by:weklica
ID: 39759742
Update:  just to be clear what my goal is:

I want to run the script each day and it will delete anything older that 14 days based on the ADJAPPLYDTM column.  the whole row goes based on that one field's value.
0
 
LVL 60

Expert Comment

by:Kevin Cross
ID: 39759754
What are some sample values of the ADJAPPLYDTM field, or more importantly can you verify the data type of the column?
0
 

Author Comment

by:weklica
ID: 39759762
Yes, it is datetime as type of column.

Here is a format example:  2013-11-24 00:00:00
0
Limited time offer using promo code EXPERTS30

Designed with a wealth of functionality and convenience, ATEN's new Thunderbolt™ 2 Sharing Switch takes your Thunderbolt setup to the next level. Now through September 15, 2017, Experts Exchange members get 30% off the US7220 on the ATEN USA eShop using promo code EXPERTS30.

 
LVL 60

Accepted Solution

by:
Kevin Cross earned 2000 total points
ID: 39759769
Here is an example:
DELETE
FROM `hours`
WHERE ADJAPPLYDTM < DATE_SUB(CURDATE(), INTERVAL 14 DAY)
;

Open in new window


The code should delete rows with a date less than '2013-12-23' if run today.  If you want to control the date, substitute CURDATE() for literal like '2013-12-30', leveraging STR_TO_DATE() if necessary.
0
 

Author Closing Comment

by:weklica
ID: 39759784
PERFECT!  This is what I needed.  The CURDATE will make things easier and I must have been forgetting the semicolon accidentally.  THANKS MUCH.
0
 

Author Comment

by:weklica
ID: 39759812
One other question if you don't mind:

What would it look like to delete just the last two days as well?  I will run it as a second SQL query obviously, but last two days as well would be nice to clean up....
0
 
LVL 60

Expert Comment

by:Kevin Cross
ID: 39759834
Do you mean you want to keep records between '2013-12-23' and '2014-01-04', removing everything else?  Remember the "INTERVAL n DAY" portion of the code controls how you shift the original date, which in your case is today.  If last two days refers to today and yesterday, then you really want "INTERVAL 1 DAY" whereas to grab Saturday (two days ago) as well you need "INTERVAL 2 DAY".

Anyway, the query would be:
DELETE
FROM `hours`
WHERE ADJAPPLYDTM >= DATE_SUB(CURDATE(), INTERVAL 1 DAY)
;

Open in new window


Therefore, you can combine the queries into one:
DELETE
FROM `hours`
WHERE (ADJAPPLYDTM < DATE_SUB(CURDATE(), INTERVAL 14 DAY)
OR ADJAPPLYDTM >= DATE_SUB(CURDATE(), INTERVAL 1 DAY))
;

Open in new window


If I did not understand you question correctly, you may want to consider created a related question.  It will notify me as well as bring in additional Experts.

Regards,

Kevin
0

Featured Post

On Demand Webinar: Networking for the Cloud Era

Did you know SD-WANs can improve network connectivity? Check out this webinar to learn how an SD-WAN simplified, one-click tool can help you migrate and manage data in the cloud.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

In this blog post, we’ll look at how ClickHouse performs in a general analytical workload using the star schema benchmark test.
In this article, I’ll talk about multi-threaded slave statistics printed in MySQL error log file.
In this video, Percona Solution Engineer Dimitri Vanoverbeke discusses why you want to use at least three nodes in a database cluster. To discuss how Percona Consulting can help with your design and architecture needs for your database and infras…
In this video, Percona Solution Engineer Rick Golba discuss how (and why) you implement high availability in a database environment. To discuss how Percona Consulting can help with your design and architecture needs for your database and infrastr…
Suggested Courses
Course of the Month9 days, 19 hours left to enroll

762 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question