質問編集履歴
1
詳細の書き込み
title
CHANGED
File without changes
|
body
CHANGED
@@ -11,6 +11,62 @@
|
|
11
11
|
2 1 0 0 201
|
12
12
|
2 0 0 0 201
|
13
13
|
2 1 0 0 201
|
14
|
+
2 1 1 0 202
|
15
|
+
2 1 1 0 202
|
16
|
+
2 0 1 0 202
|
17
|
+
2 1 1 0 202
|
14
18
|
このようなデータがあった場合にbidグループ内でlast=1のもののみで平均を計算、last=1以外のものに対してlast_resulstの部分に計算結果を入れ、last=2に更新するようなものです。
|
15
19
|
更新したいのはlast=1の値が存在するbid=200のグループのみなのですが
|
16
|
-
どうしてもすべてのlast=0の部分がlast=2にupdateされてしまいます。
|
20
|
+
どうしてもすべてのlast=0の部分がlast=2にupdateされてしまいます。
|
21
|
+
|
22
|
+
update sample1 set last_result = (select avg(result) from sample1 where last = 1 and id = 2 and bid = 200 ),last = 2 where last = 0 and id = 2 and bid = 200;
|
23
|
+
|
24
|
+
といった命令をします。 省略して書いてるのでもしかしたら動かないかもしれないですが、
|
25
|
+
|
26
|
+
id result last last_result bid
|
27
|
+
2 1 1 0 200
|
28
|
+
2 1 2 1 200
|
29
|
+
2 0 2 1 200
|
30
|
+
2 1 1 0 200
|
31
|
+
2 1 0 0 201
|
32
|
+
2 1 0 0 201
|
33
|
+
2 0 0 0 201
|
34
|
+
2 1 0 0 201
|
35
|
+
2 1 1 0 202
|
36
|
+
2 1 1 0 202
|
37
|
+
2 0 1 0 202
|
38
|
+
2 1 1 0 202
|
39
|
+
|
40
|
+
となるようにしています。
|
41
|
+
ここで
|
42
|
+
bid = 201にしたときに
|
43
|
+
id result last last_result bid
|
44
|
+
2 1 1 0 200
|
45
|
+
2 1 0 1 200
|
46
|
+
2 0 0 1 200
|
47
|
+
2 1 1 0 200
|
48
|
+
2 1 2 0 201
|
49
|
+
2 1 2 0 201
|
50
|
+
2 0 2 0 201
|
51
|
+
2 1 2 0 201
|
52
|
+
2 1 1 0 202
|
53
|
+
2 1 1 0 202
|
54
|
+
2 0 1 0 202
|
55
|
+
2 1 1 0 202
|
56
|
+
|
57
|
+
となってしまいます。ここでの理想は、bid = 201 のグループにはlast = 1 であるものがないので last = 0 のままとなる下記です
|
58
|
+
id result last last_result bid
|
59
|
+
2 1 1 0 200
|
60
|
+
2 1 0 1 200
|
61
|
+
2 0 0 1 200
|
62
|
+
2 1 1 0 200
|
63
|
+
2 1 0 0 201
|
64
|
+
2 1 0 0 201
|
65
|
+
2 0 0 0 201
|
66
|
+
2 1 0 0 201
|
67
|
+
2 1 1 0 202
|
68
|
+
2 1 1 0 202
|
69
|
+
2 0 1 0 202
|
70
|
+
2 1 1 0 202
|
71
|
+
|
72
|
+
このようなことに対して、どのようにwhere句を指定すればいいのでしょうか?
|