如何显示 sql 行直到下一个数字小于之前的数字?
How to display sql rows until next number is lower than the one before?
这很难解释清楚,但我会尽量说清楚,我希望有人能理解我并能提供帮助。
我有一个 sql table,有点像这样:
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 周),它就会显示出来。
如果我可以查看 table 哪一年的星期与哪三个月的星期相关联,这当然会很容易,但我不知道数据库中的任何信息。我不知道什么三个月的周与哪一年的周相关联,没有。
所以我认为最好的解决办法是检查下一行的数字是否大于前一行,如果是,继续。如果没有,那就是三个月了。然后继续下一个,从第 2 学期的第 1(第一周)开始。
为了更清楚地说明用户要求第 2 学期的结果如下:
Year Weeks Trimester Weeks Unimportant Info
37 1 bla
38 2 bla
我找不到有类似问题或任何解释的人。我想也许 For Loop 是可行的,但我的知识还不是无限的,到目前为止我尝试的一切都没有奏效。
对于这个可怕的问题,我深表歉意,但你是我现在唯一的希望。
谢谢
解决方法是将三个月添加到您的table:
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;
这将显示您想要的任何三个月的预期结果。请注意,此解决方案假定 trimester week 列是每三个月的增量值,并且始终从 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;
这很难解释清楚,但我会尽量说清楚,我希望有人能理解我并能提供帮助。
我有一个 sql table,有点像这样:
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 周),它就会显示出来。
如果我可以查看 table 哪一年的星期与哪三个月的星期相关联,这当然会很容易,但我不知道数据库中的任何信息。我不知道什么三个月的周与哪一年的周相关联,没有。
所以我认为最好的解决办法是检查下一行的数字是否大于前一行,如果是,继续。如果没有,那就是三个月了。然后继续下一个,从第 2 学期的第 1(第一周)开始。
为了更清楚地说明用户要求第 2 学期的结果如下:
Year Weeks Trimester Weeks Unimportant Info
37 1 bla
38 2 bla
我找不到有类似问题或任何解释的人。我想也许 For Loop 是可行的,但我的知识还不是无限的,到目前为止我尝试的一切都没有奏效。
对于这个可怕的问题,我深表歉意,但你是我现在唯一的希望。
谢谢
解决方法是将三个月添加到您的table:
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;
这将显示您想要的任何三个月的预期结果。请注意,此解决方案假定 trimester week 列是每三个月的增量值,并且始终从 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;