我目前在我的代码中应用学年的概念时遇到问题, 如果我不申请,可能会出错的一件事 学年的概念,只使用生日和当前日期来获得 child 的水平 是它不会检测那个 child 是否仍然是托儿所或已经是学前类。 我已经知道要完成这项工作,我需要一个名为“加入日期”的列 我已经把它加到我的 table 上了。现在我的问题是如何使用它。
到目前为止我做了什么。
我当前的sql语句分为3个(我命名为ClassType)
ClassType
**4** - 4 years old below (Nursery)
**5** - between 4 yr old and 6 yr old (Pre-k)
**6** - 6 years old above (kindergarten)
sql语句:
SELECT
c.ChildID,
c.ChildName,
TIMESTAMPDIFF(YEAR, c.Birthdate, CURDATE()) as Age,
cls.ClassID,
CASE WHEN
(cls.ClassTypeAgeNo = 2) AND TIMESTAMPDIFF(Year, c.Birthdate, CURDATE()) <= 4 THEN 4
WHEN
(cls.ClassTypeAgeNo = 2) AND TIMESTAMPDIFF(Year, c.Birthdate, CURDATE()) = 5 THEN 5
WHEN
WHEN (cls.ClassTypeAgeNo = 2) AND TIMESTAMPDIFF(Year, c.Birthdate, CURDATE()) >= 6 THEN 6
END AS ClassType
FROM m_Student c
inner join m_Class cls on c.ClassID = cls.ClassID
以上查询的结果 我想要的结果仍然是一样的,但它必须检查 child 是否 仍处于同一水平或不基于学年
我当前的代码可以正确检查 child 是否处于什么水平,但不能 检测 child 是否仍在同一层或移动到另一层。
编辑: 学校从2015/04/01开学到2016/03/31结束。
最佳答案
没有足够的关于加入日期如何影响水平的形成,但我认为解决方案可能接近于此:
SELECT
c.ChildID,
c.ChildName,
TIMESTAMPDIFF(YEAR, c.Birthdate, CURDATE()) as Age,
cls.ClassID,
CASE WHEN
(cls.ClassTypeAgeNo = 2) AND (TIMESTAMPDIFF(Year, c.Birthdate, c.date_joined) -
CASE WHEN MONTH(c.date_joined) > 4 THEN 1 ELSE 0 END) <= 4 THEN 4
WHEN
(cls.ClassTypeAgeNo = 2) AND (TIMESTAMPDIFF(Year, c.Birthdate, c.date_joined) -
CASE WHEN MONTH(c.date_joined) > 4 THEN 1 ELSE 0 END) = 5 THEN 5
WHEN
(cls.ClassTypeAgeNo = 2) AND (TIMESTAMPDIFF(Year, c.Birthdate, c.date_joined) -
CASE WHEN MONTH(c.date_joined) > 4 THEN 1 ELSE 0 END) >= 6 THEN 6
END AS ClassType
FROM m_Student c
inner join m_Class cls on c.ClassID = cls.ClassID
关于php - 根据 3 个参数(加入日期、出生日期、学校学年)检查学生是否在托儿所、学前类、幼儿园,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30498618/