teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

コメントの内容を反映

2021/03/11 01:12

投稿

neko_the_shadow
neko_the_shadow

スコア2395

answer CHANGED
@@ -1,5 +1,6 @@
1
- -「start_timeと同じ日、かつ、start_timeより前、かつ、最後にvalueが5以上になった時間」以上
1
+ - 「start_timeと同じ日、かつ、start_timeより前、かつ、最後にvalueが5以上になった時間」以上
2
- -「start_time」未満
2
+ - 「start_time」未満
3
+
3
4
  上の条件を満たすtable2の行数を数えたいということであっていますか?
4
5
 
5
6
  であれば、これをそのままクエリにすれば良いかと思います。
@@ -16,8 +17,33 @@
16
17
  FROM table2 AS c
17
18
  WHERE a.id = c.id
18
19
  AND a.date = DATEVALUE(c.time)
19
- AND c.time <= a.start_time
20
+ AND c.time < a.start_time
20
21
  AND c.value >= 5) <= b.time
21
22
  AND b.time < a.start_time) AS value_time
22
23
  FROM table1 AS a
24
+ ```
25
+
26
+ ---
27
+
28
+ **2021-03-11 10:00 追記**
29
+
30
+ - 「start_timeより前、かつ、最後にvalueが5以上になった時間(Table1.Dateと同じ日とは限らない)」以上
31
+ - 「start_time」未満
32
+
33
+ ↑が実際の仕様であるならば、SQLは以下のようになるかと思います。
34
+
35
+ ```SQL
36
+ SELECT
37
+ a.id,
38
+ a.date,
39
+ (SELECT COUNT(*)
40
+ FROM table2 AS b
41
+ WHERE a.id = b.id
42
+ AND (SELECT MAX(c.time)
43
+ FROM table2 AS c
44
+ WHERE a.id = c.id
45
+ AND c.time < a.start_time
46
+ AND c.value >= 5) <= b.time
47
+ AND b.time < a.start_time) AS value_time
48
+ FROM table1 AS a
23
49
  ```