[英]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.