Hi @ All.
Ich habe folgende Tabellenstruktur für Buchungen:
| account | date | month | test | ...
| 1 | 2015-01-01 | 2015-01 | 1 | ...
| 1 | 2015-01-02 | 2015-01 | 1 | ...
| 1 | 2015-03-03 | 2015-01 | 1 | ...
| 1 | 2015-02-01 | 2015-02 | 2 | ...
| 1 | 2015-03-01 | 2015-03 | 4 | ...
| 1 | 2015-03-02 | 2015-03 | 4 | ...
| 2 | ... | ... | ... | ...
Ich brauche ein Query, das so gruppiert, dass ich pro account eine Zeile habe mit Summen der übrigen Spalten. Allerdings darf pro month nur die Zeile mit dem höchsten date mit in die Summe einbezogen werden. Das entsprechende date muss nicht zwingend im jeweiligen month liegen.
So soll zum Beispiel hier folgendes raus kommen:
| account | test | ...
| 1 | 7 | ...
| 2 | ... | ...
Was ich bräuchte wäre so etwas wie folgendes. Nur bin ich mir nicht sicher, wie ich die HAVING-Klausel Formulieren muss, bzw. ob das mit HAVING überhaupt realisierbar ist.
SELECT SUM(test)
FROM bookings
GROUP BY account, month
HAVING date = MAX(date)
LG, Christian.
Test-Umgebung:
CREATE TABLE `bookings` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`account` int(11) DEFAULT NULL,
`date` datetime DEFAULT NULL,
`month` date DEFAULT NULL,
`test` int(11) DEFAULT NULL,
PRIMARY KEY (`ID`)
);
INSERT INTO `bookings` (`ID`, `account`, `date`, `month`, `test`) VALUES (1,1,'2015-01-01 00:00:00','2015-01-01',1);
INSERT INTO `bookings` (`ID`, `account`, `date`, `month`, `test`) VALUES (2,1,'2015-03-02 00:00:00','2015-03-01',4);
INSERT INTO `bookings` (`ID`, `account`, `date`, `month`, `test`) VALUES (3,1,'2015-01-02 00:00:00','2015-01-01',1);
INSERT INTO `bookings` (`ID`, `account`, `date`, `month`, `test`) VALUES (4,1,'2015-03-01 00:00:00','2015-01-01',1);
INSERT INTO `bookings` (`ID`, `account`, `date`, `month`, `test`) VALUES (5,1,'2015-02-01 00:00:00','2015-02-01',2);
INSERT INTO `bookings` (`ID`, `account`, `date`, `month`, `test`) VALUES (6,1,'2015-03-01 00:00:00','2015-03-01',4);