回答編集履歴

6

extractでは1分1秒違いのケースに対応できないのを修正

2018/09/17 08:16

投稿

退会済みユーザー
test CHANGED
@@ -26,6 +26,8 @@
26
26
 
27
27
  from tmp
28
28
 
29
- where extract(day from time - ltime) <= 1;
29
+ where time = ltime
30
+
31
+ or time = ltime + interval '1 second'
30
32
 
31
33
  ```

5

ちょっと修正

2018/09/17 08:15

投稿

退会済みユーザー
test CHANGED
@@ -16,7 +16,7 @@
16
16
 
17
17
  SELECT ord,time,
18
18
 
19
- lag(time) over(partition by ord order by product,time,machine) as ltime
19
+ lag(time) over(partition by product,ord order by time,machine) as ltime
20
20
 
21
21
  FROM t
22
22
 

4

productをPartionBy句に追加

2018/09/17 08:07

投稿

退会済みユーザー
test CHANGED
@@ -16,7 +16,7 @@
16
16
 
17
17
  SELECT ord,time,
18
18
 
19
- lag(time) over(partition by ord order by time,machine) as ltime
19
+ lag(time) over(partition by ord order by product,time,machine) as ltime
20
20
 
21
21
  FROM t
22
22
 

3

ctidではなくmachineを使用

2018/09/17 05:20

投稿

退会済みユーザー
test CHANGED
@@ -16,7 +16,7 @@
16
16
 
17
17
  SELECT ord,time,
18
18
 
19
- lag(time) over(partition by ord order by time,ctid) as ltime
19
+ lag(time) over(partition by ord order by time,machine) as ltime
20
20
 
21
21
  FROM t
22
22
 

2

一意性のあるソートにするため、ctidをソートキーに追加

2018/09/17 05:08

投稿

退会済みユーザー
test CHANGED
@@ -16,7 +16,7 @@
16
16
 
17
17
  SELECT ord,time,
18
18
 
19
- lag(time) over(partition by ord order by time) as ltime
19
+ lag(time) over(partition by ord order by time,ctid) as ltime
20
20
 
21
21
  FROM t
22
22
 
@@ -28,6 +28,4 @@
28
28
 
29
29
  where extract(day from time - ltime) <= 1;
30
30
 
31
-
32
-
33
31
  ```

1

修正

2018/09/17 03:29

投稿

退会済みユーザー
test CHANGED
@@ -1,3 +1,33 @@
1
1
  GROUP BY order,(timeの秒が奇数なら1秒引く)
2
2
 
3
3
  でいいのでは?
4
+
5
+ と思ったけど駄目ですね。
6
+
7
+
8
+
9
+ 律儀にlagを使えば良さそうです。
10
+
11
+
12
+
13
+ ```sql
14
+
15
+ with tmp as(
16
+
17
+ SELECT ord,time,
18
+
19
+ lag(time) over(partition by ord order by time) as ltime
20
+
21
+ FROM t
22
+
23
+ where ok)
24
+
25
+ select count(*)
26
+
27
+ from tmp
28
+
29
+ where extract(day from time - ltime) <= 1;
30
+
31
+
32
+
33
+ ```