首页 文章

如何编写SQL查询以显示具有结束日期列的特定时间段的任务提醒? [关闭]

提问于
浏览
1

我正在开发一个应用程序,我有一个表 company_namestart_dateend_date . 我有很多公司,分别是1月到3月,4月到6月,7月到9月,10月到12月 . 我附上我的sql数据截图供你帮忙 .
enter image description here

现在,让我们说三月是某些公司的end_date . 如果你看到表格数据ABC,XYZ和PQR正在使用end_date进行游行 . 所以我想在仪表板上显示这些提醒 .

如果March是end_date,则应该在上个月8日end_date的1个月之前开始显示在仪表板上 . 它将在2月8日开始显示 . 直到5月7日 . 如果June是end_date,则应该在上个月8日end_date的1个月之前开始显示在仪表板上 . 它将在5月8日开始显示 . 直到8月7日 . 正如我所说,它将从上个月的第8个日期开始,直到接下来的2个月和第3个月的第7个日期 . 如何为这种场景编写查询 .

1 回答

  • 2

    我不确定在“结束前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你可以尝试一下

相关问题