如果行值从以前更改,则Sql查询打印所有行

时间:2017-10-03 07:44:11

标签: sql postgresql

我有一张像

这样的表格
0.123    0b
0.246 -> 0.0b
0.492 -> 0.00b
0.984 -> 0.000b
1.968 -> 0.0001b
1.936 -> 0.00011b
1.872 -> 0.000111b
1.744 -> 0.0001111b
1.488 -> 0.00011111b
0.976 -> 0.000111110b 

我想编写一个sql查询,如果计划值从上一行更改,则打印所有行。所以输出应该是

 id device_id  time   mode   sign        plan  
  1   1001     9.00     1      1          A
  2   1001     9.01     2      1          A
  3   1001     9.02     3      1          B
  4   1001     9.03     4      1          B
  5   1001     9.04     5      1          A

有没有办法做到这一点?这是一个包含许多其他列和> 100k数据的大表。 加入同一个表不起作用,因为执行时间太长。

我试过这个。

 1   1001     9.00     1      1          A
 3   1001     9.02     3      1          B
 5   1001     9.04     5      1          A

但这只给出了

SELECT device_id, time ,  mode ,  sign  ,plan
FROM table where id IN
(SELECT MIN(id) FROM table GROUP BY plan)  

任何人都可以建议此查询的任何改进版本,它提供

 1   1001     9.00     1      1          A
 3   1001     9.02     3      1          B

1 个答案:

答案 0 :(得分:2)

您可以使用lag window function

def http = new HTTPBuilder(uri)

http.request(POST,JSON ) { req ->
    headers.'Content-Type' = 'application/json'
    headers.'x-chkp-sid' = CHKPsid
    body = [
            "limit" : 100,
            "offset" : 0,
            "details-level" : "standard"
    ]

    response.success = { resp, json ->
       println (json)
       println "POST Success. SHOWGWS: ${resp.statusLine}"
       println json.objects.name
       println json.size()
       println json.getClass()
     assert json.objects.name == 'gw-6eee89'
    }
}

Example at regtester.