首页 > 解决方案 > 如何编写sql查询以显示带有结束日期列的特定时间段的任务提醒?

问题描述

我正在开发一个应用程序,其中我有一张带有company_name, start_date,的表end_date。我有很多公司,他们各自的季度是1-3月,4-6月,7-9月,10-12月。我附上我的sql数据截图以供您帮助。在此处输入图像描述

现在,假设某些公司的 3 月是 end_date。如果您看到表数据 ABC、XYZ 和 PQR 的 end_date 是 3 月。所以我想在仪表板上显示该提醒。

如果March是,end_date那么它应该在上个月的end_date8 日的 1 个月之前开始显示在仪表板上。意味着它将在 8 日开始显示February。至 7 日May

如果June是,end_date那么它应该在上个月的end_date8 日的 1 个月之前开始显示在仪表板上。意味着它将在 8 日开始显示May。至 7 日August

正如我所说,它将从上个月的第 8 天开始到接下来的 2 个月和第 3 个月的第 7 天。如何为这种情况编写查询。

标签: phpmysqldate

解决方案


我不确定在“30 天前”结束时显示提醒是否正常,或者出于法律或业务要求,提醒是否需要在一个月前开始,但我相信这些查询中的任何一个都是检索的良好开始结束日期之前的提醒(假设在结束日期之后不显示)。

第一个确定 enddate 是否在接下来的 30 天内:

-- Items with end date in next 30 days from now    
select *, DateDiff(enddate,now()) AS DaysUntilEnd
from data
where 
  DateDiff(enddate,now()) >=0 AND DateDiff(enddate,now()) < 30;

第二个计算提醒的开始和结束日期:

-- Items with notification start exactly 1 month before
select *, 
DATE_SUB(enddate, INTERVAL 1 MONTH) AS NotificationStart,
enddate AS NotificationEnd
from data
where
   now() > DATE_SUB(enddate, INTERVAL 1 MONTH) AND
   now() <= enddate

您可以尝试使用SQL Fiddle


推荐阅读