如何显示 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;