繁体   English   中英

MySQL Using Case语句确定下一个Qtr(最后一个Qtr为4时)

[英]MySQL Using Case statement determine the Next Qtr (when the last Qtr was 4)

我已经查看了尽可能多的Stack帖子,这些帖子已经尽我所能了,但是我仍然还不足够。

我有一个表,其中包含笔测到期的日期,我正在创建一个视图,它将向我显示本季度和下一个季度的笔测。

    SELECT 
    `pen_test_cycle`.`ptc_uid` AS `ptc_uid`,
    `pen_test_cycle`.`ptc_system` AS `ptc_system`,
    `pen_test_cycle`.`ptc_cycle` AS `ptc_cycle`,
    `pen_test_cycle`.`ptc_start_date` AS `ptc_start_date`,
    QUARTER(`pen_test_cycle`.`ptc_start_date`) AS `Qtr`,
    `pen_test_cycle`.`ptc_compliance` AS `ptc_compliance`,
    `inscope_systems`.`iss_uid` AS `iss_uid`,
    `inscope_systems`.`system_name` AS `system_name`,
    `inscope_systems`.`system_compliance` AS `system_compliance`,
    QUARTER(CURDATE()) AS `current Qtr`
FROM
    ((`pen_test_cycle`
    JOIN `inscope_systems` ON ((`pen_test_cycle`.`ptc_system` = `inscope_systems`.`iss_uid`)))
    JOIN `compliance_standard` ON ((`pen_test_cycle`.`ptc_compliance` = `compliance_standard`.`cs_uid`)))

  Where QUARTER(`pen_test_cycle`.`ptc_start_date`) = QUARTER(CURDATE())

  or

  QUARTER(`pen_test_cycle`.`ptc_start_date`) = QUARTER(CURDATE())+1

该代码可以正常工作,除非我们在第4季度,然后显然下一个Qtr将是第5季度,该季度显然不存在

我假设前进的方法是使用“如果当前Qtr为4,则下一个Qtr为1”类型声明,所以我想到了这一点(另尝试了几次尝试)

    SELECT 
    `pen_test_cycle`.`ptc_uid` AS `ptc_uid`,
    `pen_test_cycle`.`ptc_system` AS `ptc_system`,
    `pen_test_cycle`.`ptc_cycle` AS `ptc_cycle`,
    `pen_test_cycle`.`ptc_start_date` AS `ptc_start_date`,
    QUARTER(`pen_test_cycle`.`ptc_start_date`) AS `Qtr`,
    `pen_test_cycle`.`ptc_compliance` AS `ptc_compliance`,
    `inscope_systems`.`iss_uid` AS `iss_uid`,
    `inscope_systems`.`system_name` AS `system_name`,
    `inscope_systems`.`system_compliance` AS `system_compliance`,
    QUARTER(CURDATE()) AS `current Qtr`,
    (CASE QUARTER(`pen_test_cycle`.`ptc_start_date`) 
    WHEN 1 Then 2 
    When 2 Then 3 
    When 3 Then 4 
    WHEN 4 Then 1
    Else 0 
    End) as nqt
FROM
    ((`pen_test_cycle`
    JOIN `inscope_systems` ON ((`pen_test_cycle`.`ptc_system` = `inscope_systems`.`iss_uid`)))
    JOIN `compliance_standard` ON ((`pen_test_cycle`.`ptc_compliance` = `compliance_standard`.`cs_uid`)))

  Where QUARTER(`pen_test_cycle`.`ptc_start_date`) = QUARTER(CURDATE())

  or

  QUARTER(`pen_test_cycle`.`ptc_start_date`) = 'nqt'

正如我说的那样,我显然做错了一些内在的错误,但我无法找到问题,如果有人可以建议如何进行这项工作或提出更明智的解决方案,那将是很好的。

非常感谢

您可以使用模数函数,并在第一个查询中替换

QUARTER(`pen_test_cycle`.`ptc_start_date`) = QUARTER(CURDATE())+1

QUARTER(`pen_test_cycle`.`ptc_start_date`) = QUARTER(CURDATE()) % 4 + 1 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM