井盖监测:
1、数据库表结构
数据来源:井盖监测,多个井盖向服务器发送井盖的状态信息(井盖关、井盖开),存储到数据库中。
目前想要得到的结果是:同一个井盖向服务器传的状态可能都是井盖关,直到井盖开,前面的井盖关只需要最后一个。井盖开后一段时间内井盖向服务器传的都是井盖关 直到传井盖开,前面的井盖关只要最后一条数据。2、结果

解决方案 »

  1.   

    结果2就是最后想要的结果图。 java后台 ,sql语句怎么写
      

  2.   

    需求没看懂. 按照我的理解,移位时间是开, 复位是关. 那就是监控井盖开启的时间段.
    参考下面这个SQL:
    WITH TMP AS
     (SELECT CASE
                WHEN LEVEL <= 5 THEN
                 '关'
                WHEN LEVEL <= 10 THEN
                 '开'
                WHEN LEVEL <= 15 THEN
                 '关'
                WHEN LEVEL <= 20 THEN
                 '开'
                ELSE
                 '关'
              END STATUS, LEVEL AS L
      FROM   DUAL
      CONNECT BY LEVEL <= 30)
    SELECT MIN(L) AS OPEN_TIME, CLOSE_TIME
    FROM   (SELECT T.*,
                    LEAD(CASE
                            WHEN STATUS = '开' THEN
                             NULL
                            ELSE
                             L
                          END IGNORE NULLS) OVER(ORDER BY L) AS CLOSE_TIME
             FROM   TMP T)
    WHERE  STATUS = '开'
    GROUP  BY CLOSE_TIME