2016-07-22 4 views
-2

Ich möchte 3. Spalte hinzufügen oder zweite Spalte durch Hinzufügen der vorherigen Zeile Wert Punktzahl ändern. Ich erhalte datensatzweise zwei Tabellenhinzufügungen, kann aber keine serielle Datenaddition erhalten.Rolling-up-Zusatz mit mysql

DDLs:

CREATE TABLE 1_bugs 
(id int(11) NOT NULL 
, date date NOT NULL 
, cf1 int(11) NOT NULL 
, cf2 int(11) NOT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

INSERT INTO 1_bugs (id, date, cf1, cf2) VALUES 
(1, '2016-07-19', 3, 2), 
(2, '2016-07-19', 2, 1), 
(3, '2016-07-22', 2, 2); 

Abfrage:

SELECT table.date1, IFNULL(table.cf1 + bugs.cf2),0) as score FROM table GROUP BY table.date1; 

Ausgang:

| date1 | score | 
| 2016-07-19 | 5 | 
| 2016-07-19 | 3 | 
| 2016-07-22 | 4 | 

Erwartet:

| date1 | score | Total score | 
| 2016-07-19 | 5 | 5 | 
| 2016-07-19 | 3 | 8 | 
| 2016-07-22 | 4 | 12 | 

Ich habe Rollup versucht, aber es gibt keine Ausgabe wie erwartet und nur Null Zeile mit der Addition aller Score-Werte hinzugefügt.

| date1 | score | 
| 2016-07-19 | 5 | 
| 2016-07-19 | 3 | 
| 2016-07-22 | 4 | 
| null  | 12 | 

Kann mir bitte jemand helfen, die Ausgabe wie erwartet zu bekommen?

+1

Wenn Sie möchten, sollten Sie im Anschluss an diese einfachen zweistufigen Vorgehensweise: 1. Wenn Sie dies noch nicht getan haben, eine ordnungsgemäße und CREATE-Anweisungen INSERT (und/oder einer sqlfiddle), damit wir leichter replizieren Sie das Problem. 2. Wenn Sie dies noch nicht getan haben, geben Sie eine gewünschte Ergebnismenge ein, die den in Schritt 1 bereitgestellten Informationen entspricht. – Strawberry

+0

CREATE TABLE '1_bugs' ( ' id' int (11) NICHT NULL, 'Datum' Datum NOT NULL , 'cf1' int (11) NICHT NULL, ' cf2' int (11) NICHT NULL ) ENGINE = InnoDB DEFAULT CHARSET = latin1; INSERT INTO '1_bugs' (' id', 'date',' cf1', 'cf2') WERTE (1, '2016-07-19', 3, 2), (2, 2016-07 -19 ', 2, 1), (3,' 2016-07-22 ', 2, 2); –

+0

Kannst du es noch einmal lesen? Nicht erwähnt erstellen, einfügen und erwartet, tatsächlich, Problem bereits? Besser können Sie es bitte beantworten, wenn Sie es wissen? –

Antwort

1
SELECT x.* 
    , x.cf1+x.cf2 sub_total 
    , SUM(y.cf1+y.cf2) running 
    FROM 1_bugs x 
    JOIN 1_bugs y 
    ON y.id <= x.id 
GROUP 
    BY x.id; 
+----+------------+-----+-----+-----------+---------+ 
| id | date  | cf1 | cf2 | sub_total | running | 
+----+------------+-----+-----+-----------+---------+ 
| 1 | 2016-07-19 | 3 | 2 |   5 |  5 | 
| 2 | 2016-07-19 | 2 | 1 |   3 |  8 | 
| 3 | 2016-07-22 | 2 | 2 |   4 |  12 | 
+----+------------+-----+-----+-----------+---------+ 
+0

Danke für schnelle und perfekte Antwort! Ich habe eine Frage, ich habe ein paar Tische und wenn ich mich daran beteilige, gibt es mir ein Problem. Soll ich hier eine Notiz hinzufügen oder möchte ich eine neue Frage erstellen, damit Sie dort antworten können? –

+0

Stellen Sie eine neue Frage und beziehen Sie sich auf diese Frage – Strawberry