mysql sql查询中的日期逻辑
嗨,我完全搞不懂mysql查询中的日期逻辑,因为cron作业每天早上12:00运行 我在一个汽车上市网站上工作,那里的汽车上市有一个mysql datetime格式的到期日 所有过期房源将在到期日起7天后从网站上删除 当cron作业运行时,它必须执行以下操作 任务1-向用户发送电子邮件警报,告知他们的列表已过期 因此,我需要选择自上次运行cron作业以来已过期的所有列表,并且在此之前不包括列表,以便每个列表只发送一次过期警报电子邮件 我尝试了执行此任务的sql查询(再次与此混淆)mysql sql查询中的日期逻辑,mysql,sql,datetime,Mysql,Sql,Datetime,嗨,我完全搞不懂mysql查询中的日期逻辑,因为cron作业每天早上12:00运行 我在一个汽车上市网站上工作,那里的汽车上市有一个mysql datetime格式的到期日 所有过期房源将在到期日起7天后从网站上删除 当cron作业运行时,它必须执行以下操作 任务1-向用户发送电子邮件警报,告知他们的列表已过期 因此,我需要选择自上次运行cron作业以来已过期的所有列表,并且在此之前不包括列表,以便每个列表只发送一次过期警报电子邮件 我尝试了执行此任务的sql查询(再次与此混淆) 从到期日>日期
从到期日>日期子项(现在(),间隔1天)和到期日<现在()的车辆中选择车辆id
任务2-将向用户发送电子邮件警报,告诉他们列表将在24小时后被永久删除
因此,我需要选择所有那些将在超过24小时/6天内被删除的列表,因为它们已经过期,我需要确保它们至少有24小时的时间来更新它们。此外,我需要选择/构建sql查询,以便只选择那些将在1天内到期的列表,而不是其他列表,以避免多个电子邮件警报而不是一次电子邮件警报
我尝试过为这个任务执行sql查询(我完全不明白这个查询)
从到期日>日期(现在(),间隔7天)和到期日<日期(现在(),间隔1天)的车辆中选择车辆id
任务3-删除7天前过期的所有列表
我尝试了以下sql查询来完成此任务
SELECT car_id FROM cars WHERE expiry_date < DATE_SUB(NOW(), INTERVAL 7 DAY)
从过期日期
请帮助我完善所有3个查询,以便cron完全按照我的要求完成它的工作。另外,请告诉我它必须在哪里>=(大于或等于)或您的查询没有明显错误,如果您不了解您所使用的函数,请搜索它们并阅读它们,直到您了解为止 在您的方法中有一个根本性的问题,即它依赖于cron作业以24小时间隔(毫秒)运行,否则会出现重复和/或遗漏 您需要另一个表来存储批处理程序上次运行的详细信息;用一行在过去很长一段时间的日期来初始化,这样我们就有了一个起点 您可以通过从BatchRecordTables中选择MAX(date\u ran)来获取最近的批次。将其存储在局部变量T0中。获取当前时间,将其存储在局部变量T1中(不要在多个查询中使用NOW(),因为它们的时间略有不同,并且需要相同)。我不知道这是MySQL的语法-你必须查一下 然后,你的处境变得更糟
从过期日期介于T0和T1之间的车辆中选择车辆id
。这将仅选择在此批和上一批之间已过期的人员从过期日期介于日期(T1,间隔6天)和T0之间的车辆中选择车辆id。这将只选择在最后一批(即,他们收到了exprired电子邮件)之前和6天前过期的人
我还建议您不要永久删除列表,而是将它们复制到DeletedListings表中,或者使用删除列标记它们-每个列表都有自己的优缺点。在信息时代,永远不要扔掉数据——你永远不知道数据什么时候可能有价值。查看这些查询
select * from cars where datediff(EXPIRY_DATE,now())=-1;
select * from cars where
datediff(DATE_ADD(EXPIRY_DATE, interval 24 hour),now())>=1 and
datediff(DATE_ADD(EXPIRY_DATE, interval 24 hour),now()) <=2;
select * from cars where datediff(expiry_date,now())<=-7;
从车中选择*,其中datediff(expiration_DATE,now())=-1;
从以下位置选择*
datediff(DATE\u ADD(到期日,间隔24小时),now())>=1和
datediff(DATE\u ADD(expiration\u DATE,interval 24小时),now())这就是您要找的吗?请尝试添加另一列以查看到期日
和当前日期时间
之间的差异,以便更好地了解您处理的日期
--第三次查询到期日期早于
--今天
选择车辆id、到期日、,
日期(现在(),间隔7天)
来自汽车
如果到期日给我们一份表格数据样本,或者优先选择SQLFiddle@DaleM-我添加了phpmyadmin转储,作为一个新手,我仍然不知道如何保存和共享SQLFIDLEtrying@DaleM-我添加了sqlfiddle,请帮助我it@Asnexplore活动日程安排
也会很好。。。要在中午12点或午夜12点触发..cognos可以执行这种查询吗?我已经创建了一个cron作业表,其中包含字段last_run_,用于存储cron上次运行的日期时间,但我需要知道如何将BatchRecordTables中的SELECT MAX(date_ran)存储在临时变量中,并在查询中使用它。你能帮我一下吗?@Asnexplore不是真的,我使用SQL Server,对MySQL语法不熟悉-你为什么不用谷歌搜索一下呢?没关系,不过我已经找到了,谢谢你的帮助
SELECT car_id FROM cars WHERE expiry_date < DATE_SUB(NOW(), INTERVAL 7 DAY)
select * from cars where datediff(EXPIRY_DATE,now())=-1;
select * from cars where
datediff(DATE_ADD(EXPIRY_DATE, interval 24 hour),now())>=1 and
datediff(DATE_ADD(EXPIRY_DATE, interval 24 hour),now()) <=2;
select * from cars where datediff(expiry_date,now())<=-7;
-- 3rd query expiry dates older than 7 days from
-- today
SELECT car_id, expiry_Date,
DATE_sub(NOW(), INTERVAL 7 DAY)
FROM cars
WHERE expiry_date <=
DATE_sub(NOW(), INTERVAL 7 DAY)
;
-- same
SELECT car_id, expiry_Date,
DATE_ADD(NOW(), INTERVAL -7 DAY)
FROM cars
WHERE expiry_date <=
DATE_ADD(NOW(), INTERVAL -7 DAY)
;
-- 2nd query going to expire in exactly 1 day
SELECT car_id, expiry_date,
Now() + interval 1 day
FROM cars
WHERE expiry_Date = Now() + interval 1 day
;
-- 1st query: expired
SELECT car_id FROM cars
WHERE expiry_date < Now()
;
-- 1st query: expired last 24 hours
SELECT car_id,DATEDIFF(expiry_date, Now())
FROM cars
WHERE expiry_Date < Now()
AND expiry_Date >= Now() - interval 1 day
;