2016-12-14 5 views
-1

私はこのようなテーブルがあります。時間が< 10分、 でない場合は、その後だけQTYMySQLのcummulative合計

結果がどうあるべき印刷する場合今、私は各ドライバのためのQTYを要約する必要が

FType | Vehicle | Driver | Time | QTY 
---------------------------------------------- 
ED | 1  | A  |20:57:51 | 5 
ED | 1  | A  |20:59:10 | 7 
ED | 2  | B  |20:58:40 | 6 
ED | 2  | B  |21:30:10 | 4 
ED | 3  | C  |21:48:33 | 1 

をlike:

FType | Vehicle | Driver | TotQTY 
---------------------------------------------- 
ED | 1  | A  | 12 
ED | 2  | B  | 6 
ED | 2  | B  | 4 
ED | 3  | C  | 1 

どうすればいいですか?

+0

私は時間差を計算する必要がある部分に貼り付けました。私は始める方法も知らない。 – Josef

+0

投稿/質問を読むことさえしていないと感じていますか?私は違いを得る方法を知っている2つの日付/時間の値は、同じ行にあるが、どのように私の例のように異なる行に同じに。これが問題です。 – Josef

+0

ドライバのグループ、各グループ内の合計時間。その後、sum <10、then sum> = 10にフィルタリングします。 – nicomp

答えて

0

ここでは、Barmarが提案するユーザー定義変数に基づいて解決策を説明しますが、ドライバのグループ化も考慮します。内側のクエリは同じドライバのどの時刻が同じグループに属するかを計算しますが、外側のクエリはこれらのグループのそれぞれのqty-sumを計算します。それが役に立てば幸い。

drop table if exists test2; 

create table test2 (
driver varchar(20), time time, qty int 
); 

insert into test2 values ('A', '20:57:51', 5); 
insert into test2 values ('A', '20:59:10', 7); 
insert into test2 values ('B', '20:58:40', 6); 
insert into test2 values ('B', '21:30:10', 4); 
insert into test2 values ('C', '21:48:33', 1); 


set @driver='', @time:= '00:00:00', @group:=0; 
select driver, sum(qty) from (select @group := if (@driver = driver and TIMEDIFF(time, @time) < 600, @group, @group + 1) as samegroup, @driver := driver as driver, @time := time as time, qty from test2) groupedqty group by driver, samegroup 
+0

私は、このタイプの回答にグループ化する必要はないと思っています。 – Strawberry

+0

SOのルールを理解できないように - 質問や答えに間違いがありますか? –

+0

私が知る限り、答えは規則に完全に準拠しています。質問は、答えと同じ考え方で情報を提供することで改善することができます。 – Strawberry