2017-12-08 7 views
0

私は2つのテーブルを取るために探しています私は1つのテーブルを作成するデータ変換を実行している。私はevents tableuser tableを持っている:テーブル作成ロジック

Events: {id, user_id, start_date, end_date, cost...} 

Users: {id, name, ...} 

私はその時にテーブルを作成しようとしていますユーザがゼロの開始コストで始めると、それはすべてのイベントの後に上がると仮定すると、日常レベルで過ごすと表示されます。

{date, userid, beginning_balance, sum(cost), num_of_events} 

私はSQL

+0

サンプルデータを質問にテキストとして追加しますか? –

+0

開始日と終了日が異なる場合は、開始日または終了日に費用が割り当てられますか? –

+0

が更新されました。これは出力に 'data'ではない日付であったはずです。 – madman

答えて

0

内のデータ変換に精通していないですと私はあなたがこのクエリ

を試すことができ、この1に取り組むする方法についていくつかの方向性を必要とする:ザ・は 出力は次のようになり意図

SELECT 
    data, 
    User.id AS userid, 
    0 AS beginning_balance, 
    SUM(cost) AS cost, 
    COUNT(0) AS num_of_events 
FROM 
    Users 
    LEFT JOIN Events ON (user_id = Users.id) 
GROUP BY 
    Users.id 
0

要件は少し不明ですが、このようなものの後になる可能性があります

drop table if exists event; 
create table event(id int auto_increment primary key, user_id int,start_date date, end_date date, cost int); 
insert into event (user_id,start_date , end_date, cost) values 
(1,'2017-01-01','2017-01-01',10),(1,'2017-01-01','2017-01-01',10), 
(1,'2017-02-01','2017-01-01',10), 
(2,'2017-01-01','2017-01-01',10); 

select e.user_id,start_date, 
      ifnull(
      (select sum(cost) 
      from event e1 
      where e1.user_id = e.user_id and e1.start_date <e.start_date 
      ), 0)beginning_balance, 
      sum(cost),count(*) 
      as num_of_events 
from users u 
join event e on e.user_id = u.userid 
group by e.user_id,start_date 

+---------+------------+-------------------+-----------+---------------+ 
| user_id | start_date | beginning_balance | sum(cost) | num_of_events | 
+---------+------------+-------------------+-----------+---------------+ 
|  1 | 2017-01-01 |     0 |  20 |    2 | 
|  1 | 2017-02-01 |    20 |  10 |    1 | 
|  2 | 2017-01-01 |     0 |  10 |    1 | 
+---------+------------+-------------------+-----------+---------------+ 
3 rows in set (0.03 sec) 
関連する問題