Created
August 31, 2014 16:13
-
-
Save ricog/eea994cccc7162c3dadb to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
-- Looking for records that will expire 3 or 9 months from today. | |
-- Original query. | |
-- DATE(NOW()) = DATE_SUB(`Dress`.`expiration_date`, INTERVAL 3 MONTH) OR | |
-- DATE(NOW()) = DATE_SUB(`Dress`.`expiration_date`, INTERVAL 9 MONTH) | |
-- Start a select query. | |
SELECT | |
-- PROBLEM | |
-- Looking for 2014-08-31, checking dates around three months ahead will never find a match. | |
DATE_SUB('2014-11-30', INTERVAL 3 MONTH) as 'Yesterday 1', # 2014-08-30 | |
# 2014-08-31 is not solveable | |
DATE_SUB('2014-12-01', INTERVAL 3 MONTH) as 'Tomorrow 1', # 2014-09-01 | |
-- Replacing DATE_SUB with regular math has same results. | |
('2014-11-30' - INTERVAL 3 MONTH) as 'Yesterday 2', # 2014-08-30 | |
# 2014-08-31 is not solveable | |
('2014-12-01' - INTERVAL 3 MONTH) as 'Tomorrow 2', # 2014-09-01 | |
-- Changing the math around to the other side gives duplicate results. | |
('2014-08-30' + INTERVAL 3 MONTH ) as 'Yesterday + 3m', # 2014-11-30 | |
('2014-08-31' + INTERVAL 3 MONTH ) as 'Today + 3m', # 2014-11-30 is same as yesterday | |
('2014-09-01' + INTERVAL 3 MONTH ) as 'Tomorrow + 3m', # 2014-12-01 | |
-- SOLUTION | |
-- Changing to DAY intervals solves the problem. Adjusting up to 92 gets us in sync with the old reminder times. | |
DATE_SUB('2014-11-30', INTERVAL 92 DAY) as 'Yesterday', # 2014-08-30 | |
DATE_SUB('2014-12-01', INTERVAL 92 DAY) as 'Today', # 2014-08-31 yay, finally today | |
DATE_SUB('2014-12-02', INTERVAL 92 DAY) as 'Tomorrow', # 2014-09-01 | |
-- It probably makes sense to change this to 91 at the beginning of next month | |
DATE_SUB('2014-11-30', INTERVAL 91 DAY) as 'Today', # 2014-08-31 - 11/30 already ran yesterday | |
DATE_SUB('2014-12-01', INTERVAL 91 DAY) as 'Tomorrow', # 2014-09-01 | |
-- Let's test a few more dates around Feb. Looks goods | |
DATE_SUB('2015-05-30', INTERVAL 92 DAY) as 'Feb 28', # 2015-02-28 | |
DATE_SUB('2015-05-31', INTERVAL 92 DAY) as 'Mar 01', # 2014-03-01 | |
DATE_SUB('2015-06-01', INTERVAL 92 DAY) as 'Mar 02', # 2014-03-02 | |
-- Now let's test 9 months out with DAY interval. There were no reminders near this range, so no need for adjustments. | |
DATE_SUB('2015-05-30', INTERVAL 270 DAY) as 'Yesterday', # 2014-08-30 | |
DATE_SUB('2015-05-31', INTERVAL 270 DAY) as 'Today', # 2014-08-31 | |
DATE_SUB('2015-06-01', INTERVAL 270 DAY) as 'Tomorrow' # 2014-09-01 | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment