3

私はこのテーブルを持っています

----------------
ID    | Duration 
----------------
1       10       
2       10      
3       10       

sum(duration)が15以上になるidを選びたい。つまり…

-------------------------
ID    | Duration | Sum
-------------------------
1       10         10
2       10         20
3       10         30

ID 2 の行で合計が大きくなります。この行を正確に選択する必要があります。

もちろん、ストアド プロシージャから SUM() を使用することはできないので、確実に WHERE の代わりに JOIN とおそらく HAVING を使用する必要があります。問題は、常に間違った結果が得られることです。

4

3 に答える 3

0

このクエリを試してください

select a.id, a.duration, sum(b.duration) as tot
from 
tbl a 
inner join
tbl b 
On
a.id>=b.id
group by a.id

正しいデュレーション値を保証します

select a.id, a.duration, b.tot
from 
tbl a 
inner join 
(select a.id, sum(b.duration) as tot
from 
tbl a 
inner join
tbl b 
On
a.id>=b.id
group by a.id)
b
on a.id=b.id

SQLフィドル

より単純なソリューションは、グループが 1 つある場合にのみ機能します。グループごとの合計が必要な場合は、クエリにいくつかの変更を加える必要があります。

select a.id, a.duration , @tot:=@tot+a.duration as tot
from 
tbl a 
join 
(select @tot:=0)tmp

SQLフィドル

| ID | DURATION | TOT |
-----------------------
|  1 |       10 |  10 |
|  2 |       50 |  60 |
|  3 |       30 |  90 |
于 2013-05-21T12:04:01.857 に答える
0

代替ソリューションについては、SQLFiddleを確認してください。

SELECT 
  id 
FROM 
  test1 
JOIN  
  (SELECT @rn := 0 ) r 
WHERE 
  (@rn := @rn + duration) > 15
于 2013-05-21T11:20:47.410 に答える