Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
MySQL Query mit "komischem" GROUP
TheBrainiac
myCSharp.de - Member

Avatar #avatar-3152.png


Dabei seit:
Beiträge: 832
Herkunft: /dev/null

Themenstarter:

MySQL Query mit "komischem" GROUP

beantworten | zitieren | melden

verwendetes Datenbanksystem: MySQL

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);
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von TheBrainiac am .
There are 10 types of people in the world:
Those, who think they understand the binary system
Those who don't even have heard about it
And those who understand "Every base is base 10"
private Nachricht | Beiträge des Benutzers
inflames2k
myCSharp.de - Experte

Avatar #AARsmmPEUMee0tQa2JoB.png


Dabei seit:
Beiträge: 2340

beantworten | zitieren | melden

Ich wäre jetzt ganz stumpf einfach auf ein SubSelect gegangen und hätte mir pro Account das höchste Datum geholt. Ist das eventuell eine Idee für dich?

Durch den aktuellen Weg "Having date = Max(date)" schließt du per se jeden Eintrag aus, der nicht vom aktuellsten Datum ist unabhängig vom Account.
Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager | Spielkartenbibliothek
private Nachricht | Beiträge des Benutzers
TheBrainiac
myCSharp.de - Member

Avatar #avatar-3152.png


Dabei seit:
Beiträge: 832
Herkunft: /dev/null

Themenstarter:

beantworten | zitieren | melden

SELECT b.`account`, SUM(b.`test`)
FROM `bookings` AS b
INNER JOIN (SELECT `account`, `month`, MAX(`date`) AS `date`
	FROM `bookings`
	GROUP BY `account`, `month`) AS t
	ON t.`account` = b.`account`
    AND t.`month` = b.`month`
    AND t.`date` = b.`date`
GROUP BY b.`account`


Danke!
There are 10 types of people in the world:
Those, who think they understand the binary system
Those who don't even have heard about it
And those who understand "Every base is base 10"
private Nachricht | Beiträge des Benutzers