2017-12-08 2 views
0

Ich bin auf der Suche nach zwei Tabellen Ich habe eine Datentransformation durchführen, um eine einzige Tabelle zu erstellen. Ich habe eine events table und user table:Tabelle Erstellungslogik

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

Users: {id, name, ...} 

Ich versuche, eine Tabelle zu erstellen, um die Benutzer zu verbringen in einer täglichen Ebene zeigt, vorausgesetzt, der Benutzer mit einem Startkosten von Null starten und es geht nach jedem Ereignisse auf.

Die beabsichtigte Ausgabe wäre:

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

Ich brauche Richtung, wie diese zu bewältigen, wie ich bin nicht sehr vertraut mit Datentransformation in SQL

+0

Möchten Sie Beispieldaten zu der Frage als Text hinzufügen. –

+0

Wenn das Startdatum und das Enddatum unterschiedlich sind, möchten Sie die Kosten für das Start- oder Enddatum angeben? –

+0

aktualisiert, das Datum sollte nicht 'Daten' in der Ausgabe gewesen sein. – madman

Antwort

0

Können Sie diese Abfrage versuchen

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

Ihre Anforderung ist ein wenig unklar, aber Sie können nach so etwas sein

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) 
Verwandte Themen