代码之家  ›  专栏  ›  技术社区  ›  Santiago San Martin

SQL查询-了解行从0更改为其他值的次数

  •  0
  • Santiago San Martin  · 技术社区  · 6 年前

    我正在使用MySQL8,需要创建一个存储过程

    我有一个表,其中有一个日期字段和一个值字段,可以是0或任何其他数字。此值字段表示当天的每日降雨量。 该表存储了今天到10年之间的数据。

    我需要弄清楚未来10年里会有多少个雨季。

    例如,如果我的表包含以下数据:

    Date          - Value
    2018-06-09    -   0
    2018-06-10    -  50
    2018-06-11    -   0
    2018-06-12    -  15
    2018-06-13    -  17
    2018-06-14    -   0
    2018-06-15    -   0
    2018-06-16    -  12
    2018-06-17    - 123
    2018-06-18   -   17
    

    然后SP应该返回3,因为有3个雨季。 如果能帮助我更接近答案,我将不胜感激!

    2 回复  |  直到 6 年前
        1
  •  2
  •   Raymond Nijland    6 年前




    SELECT 
      SUM(filter_match = 1) AS number
    FROM (
      SELECT 
        ((t.value = 0) AND (LEAD(t.value) OVER (ORDER BY t.date ASC) != 0)) AS filter_match
      FROM
       t
    ) t
    

    https://www.db-fiddle.com/f/sev4NqgLsFPgtNgwzruwy/2

    LEAD(t.value) OVER (ORDER BY t.date ASC)

    https://www.db-fiddle.com/f/sev4NqgLsFPgtNgwzruwy/6

    SUM(filter_match = 1)

    https://www.db-fiddle.com/f/sev4NqgLsFPgtNgwzruwy/8

    1 = 1 1 = 0

    https://www.db-fiddle.com/f/sev4NqgLsFPgtNgwzruwy/7

        2
  •  2
  •   cdaiga    6 年前

    MySQL join

    SELECT COUNT(*) Number_of_Periods
    FROM yourTable A JOIN yourTable B
    ON DATE(A.`DATE`)=DATE(B.`DATE` - INTERVAL 1 DAY)
    AND A.`VALUE`=0 AND B.`VALUE`>0;
    

    Demo on DB Fiddle