这很难正确解释,但我会尽量说清楚,我希望有人能理解我并能够提供帮助。
我有一个 sql 表,里面有这样的东西:
Year Weeks Trimester Weeks Unimportant Info
33 1 bla
34 2 bla
35 3 bla
36 4 bla
37 1 bla
38 2 bla
39 1 bla
40 2 bla
前 4 个孕期周是孕期 1,接下来的 2 周是孕期 2,依此类推。
我需要的是,如果有人想查看例如孕期 2(第 37 周和第 38 周)的所有信息,它就会出现。
如果我能查看表格中哪些年份周与哪些孕周相关联,这当然很容易,但我不知道数据库中的任何信息。我不知道哪个孕期周与哪一年的周有关,什么都没有。
所以我认为最好的解决方案是检查下一行是否有比前一行大的数字,如果是,请继续。如果没有,那就是三个月。然后继续下一个,从孕期 1(第一周)开始 2.
更清楚的是,用户要求孕期 2 的结果如下:
Year Weeks Trimester Weeks Unimportant Info
37 1 bla
38 2 bla
我找不到任何与此类似的问题或任何解释的人。我想也许使用 For 循环是可能的,但我的知识还不是无限的,到目前为止我尝试的所有方法都没有奏效。
我很抱歉这个令人敬畏的问题,但你是我现在剩下的唯一希望。
谢谢
以下是将
孕期添加到表中的解决方法:
SELECT * FROM
(SELECT CASE WHEN trimester_week = 1 THEN @s:=@s+1 ELSE @s END as trimester,
your_table.* from your_table,
(SELECT @s:= 0) AS s
ORDER BY year_week,trimester_week) as tt
WHERE trimester = 2;
这将显示您想要的任何三个月的预期结果。请注意,此解决方案假定孕期周列是每个孕期的增量值,并且始终以 1 开头。
这可能是不完整的 - 反映了问题中固有的混乱
SELECT x.*
FROM my_table x
JOIN my_table y
ON y.trimester_weeks = x.trimester_weeks
AND y.year_weeks <= x.year_weeks
GROUP
BY x.year_weeks
HAVING COUNT(*) = 2;