我正在开发mysql select query,其最终目标是根据预定义日期范围内的子集计数获取整数。
场景有一些限制,我似乎无法以干净的方式导航。为了简明起见,我们假设我正在处理成员组织的数据。我的情况基础包括:
回到我的查询需求。相对于当前日期的下学期,我需要计算在第八学期(包括第八学期)之前剩余的秋季+春季学期的数量。即,如果我在2016年4月1日加入,我的第一个学期将是2016年秋季,我的第八个学期将是2020年春季。截至当前日期(今天= 2017-07-17),我需要得到6个返回,这将代表2017年秋季,2018年春季,2018年秋季,2019年春季,2019年秋季和2020年春季。
其他一些例子:
我一直在使用CASE语句来帮助解决这个问题,但我是新手并且不知道这是否是最佳方法。 强烈首选是动态执行此操作,而不必使用临时表或类似工具,在这种情况下,它很容易。我目前的CASE陈述似乎有效:
CASE
WHEN DATE_FORMAT( join_date, '%m/%d' ) BETWEEN '01/01' AND '02/14' THEN CONCAT( 'Spring ', YEAR ( join_date) )
WHEN DATE_FORMAT( join_date, '%m/%d' ) BETWEEN '02/15' AND '09/14' THEN CONCAT( 'Fall ', YEAR ( join_date) )
WHEN DATE_FORMAT( join_date, '%m/%d' ) BETWEEN '09/15' AND '12/31' THEN CONCAT( 'Spring ', YEAR ( join_date) + 1 )
END AS '1st semester'
CASE
WHEN DATE_FORMAT( join_date, '%m/%d' ) BETWEEN '01/01' AND '02/14' THEN CONCAT( 'Fall ', YEAR ( join_date) + 3 )
WHEN DATE_FORMAT( join_date, '%m/%d' ) BETWEEN '02/15' AND '09/14' THEN CONCAT( 'Spring ', YEAR ( join_date) + 4 )
WHEN DATE_FORMAT( join_date, '%m/%d' ) BETWEEN '09/15' AND '12/31' THEN CONCAT( 'Fall ', YEAR ( join_date ) + 4 )
END AS '8th semester'
CASE
WHEN DATE_FORMAT( CURDATE( ), '%m/%d' ) BETWEEN '01/01' AND '02/14' THEN CONCAT( 'Fall ', YEAR ( CURDATE( ) ) - 1 )
WHEN DATE_FORMAT( CURDATE( ), '%m/%d' ) BETWEEN '02/15' AND '09/14' THEN CONCAT( 'Spring ', YEAR ( CURDATE( ) ) )
WHEN DATE_FORMAT( CURDATE( ), '%m/%d' ) BETWEEN '09/15' AND '12/31' THEN CONCAT( 'Fall ', YEAR ( CURDATE( ) ) )
END AS 'current semester'
CASE
WHEN DATE_FORMAT( CURDATE( ), '%m/%d' ) BETWEEN '01/01' AND '02/14' THEN CONCAT( 'Spring ', YEAR ( CURDATE( ) ) )
WHEN DATE_FORMAT( CURDATE( ), '%m/%d' ) BETWEEN '02/15' AND '09/14' THEN CONCAT( 'Fall ', YEAR ( CURDATE( ) ) )
WHEN DATE_FORMAT( CURDATE( ), '%m/%d' ) BETWEEN '09/15' AND '12/31' THEN CONCAT( 'Spring ', YEAR ( CURDATE( ) ) + 1 )
END AS 'next semester'
最终,我需要找到剩余学期的计数'
非常感谢任何帮助或指导。您可以在http://sqlfiddle.com/#!9/01319找到一些用户示例的示例。
这些示例的预期结果是用户3060457获得2,用户3060458获得5,用户3060459获得6,用户3060460获得7。