代码之家  ›  专栏  ›  技术社区  ›  amit sutar

如何编写SQL查询来显示特定时间段的任务提醒,并显示“结束日期”列?[关闭]

  •  1
  • amit sutar  · 技术社区  · 7 年前

    我正在处理一个应用程序,其中有一个表 company_name , start_date , end_date . 我有许多公司,它们各自的季度分别是1-3月、4-6月、7-9月、10-12月。我附上了我的SQL数据屏幕截图,以供您帮助。 enter image description here

    现在,假设3月是一些公司的结束日期,如果看到表数据ABC、XYZ和PQR的结束日期是3月。所以我想在仪表板上显示这些提醒。

    如果 March 结束日期 然后开始显示 仪表板1个月前 结束日期 上个月8日。意思是 它将在8号开始显示 February . 到第7个 May .

    如果 June 结束日期 然后开始显示 仪表板1个月前 结束日期 上个月8日。意思是 它将在8号开始显示 五月 . 到第7个 August .

    如我所说,从上个月的8号开始到下个月的2号 月和第3个月的第7天。如何编写这种类型的查询 脚本。

    1 回复  |  直到 7 年前
        1
  •  2
  •   Rudimentary    7 年前

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

    第一个选项确定结束日期是否在接下来的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 你可以试试看