質問編集履歴

1

詳細の書き込み

2019/11/21 17:42

投稿

shirana
shirana

スコア4

test CHANGED
File without changes
test CHANGED
@@ -24,8 +24,120 @@
24
24
 
25
25
  2 1 0 0 201
26
26
 
27
+ 2 1 1 0 202
28
+
29
+ 2 1 1 0 202
30
+
31
+ 2 0 1 0 202
32
+
33
+ 2 1 1 0 202
34
+
27
35
  このようなデータがあった場合にbidグループ内でlast=1のもののみで平均を計算、last=1以外のものに対してlast_resulstの部分に計算結果を入れ、last=2に更新するようなものです。
28
36
 
29
37
  更新したいのはlast=1の値が存在するbid=200のグループのみなのですが
30
38
 
31
39
  どうしてもすべてのlast=0の部分がlast=2にupdateされてしまいます。
40
+
41
+
42
+
43
+ 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;
44
+
45
+
46
+
47
+ といった命令をします。 省略して書いてるのでもしかしたら動かないかもしれないですが、
48
+
49
+
50
+
51
+ id result last last_result bid
52
+
53
+ 2 1 1 0 200
54
+
55
+ 2 1 2 1 200
56
+
57
+ 2 0 2 1 200
58
+
59
+ 2 1 1 0 200
60
+
61
+ 2 1 0 0 201
62
+
63
+ 2 1 0 0 201
64
+
65
+ 2 0 0 0 201
66
+
67
+ 2 1 0 0 201
68
+
69
+ 2 1 1 0 202
70
+
71
+ 2 1 1 0 202
72
+
73
+ 2 0 1 0 202
74
+
75
+ 2 1 1 0 202
76
+
77
+
78
+
79
+ となるようにしています。
80
+
81
+ ここで
82
+
83
+ bid = 201にしたときに
84
+
85
+ id result last last_result bid
86
+
87
+ 2 1 1 0 200
88
+
89
+ 2 1 0 1 200
90
+
91
+ 2 0 0 1 200
92
+
93
+ 2 1 1 0 200
94
+
95
+ 2 1 2 0 201
96
+
97
+ 2 1 2 0 201
98
+
99
+ 2 0 2 0 201
100
+
101
+ 2 1 2 0 201
102
+
103
+ 2 1 1 0 202
104
+
105
+ 2 1 1 0 202
106
+
107
+ 2 0 1 0 202
108
+
109
+ 2 1 1 0 202
110
+
111
+
112
+
113
+ となってしまいます。ここでの理想は、bid = 201 のグループにはlast = 1 であるものがないので last = 0 のままとなる下記です
114
+
115
+ id result last last_result bid
116
+
117
+ 2 1 1 0 200
118
+
119
+ 2 1 0 1 200
120
+
121
+ 2 0 0 1 200
122
+
123
+ 2 1 1 0 200
124
+
125
+ 2 1 0 0 201
126
+
127
+ 2 1 0 0 201
128
+
129
+ 2 0 0 0 201
130
+
131
+ 2 1 0 0 201
132
+
133
+ 2 1 1 0 202
134
+
135
+ 2 1 1 0 202
136
+
137
+ 2 0 1 0 202
138
+
139
+ 2 1 1 0 202
140
+
141
+
142
+
143
+ このようなことに対して、どのようにwhere句を指定すればいいのでしょうか?