Problem:MySQL - ausschließen letzten Monat von Gruppe
Die Tabelle Mitarbeiter die Gehaltsinformationen in einem Jahr hält.
Schreiben Sie eine SQL, um die kumulierte Summe des Gehalts eines Mitarbeiters über einen Zeitraum von 3 Monaten zu erhalten, aber den letzten Monat auszuschließen.
Das Ergebnis sollte mit "Id" aufsteigend und dann mit "Monat" absteigend angezeigt werden.
Employee-Tabelle:
| Id | Month | Salary |
|----|-------|--------|
| 1 | 1 | 20 |
| 2 | 1 | 20 |
| 1 | 2 | 30 |
| 2 | 2 | 30 |
| 3 | 2 | 40 |
| 1 | 3 | 40 |
| 3 | 3 | 60 |
| 1 | 4 | 60 |
| 3 | 4 | 70 |
Mein Code:
SELECT t1.Id, t1.Month,
(SELECT SUM(Salary)
FROM Employee AS t2
WHERE t1.Id = t2.Id
AND t1.Month >= t2.Month) AS Salary
FROM Employee t1
WHERE Month <> (SELECT
MAX(Month)
FROM Employee
GROUP BY t1.Id)
ORDER BY Id, Month DESC;
Meine Leistung:
| Id | Month | Salary |
|----|-------|--------|
| 1 | 3 | 90 |
| 1 | 2 | 50 |
| 1 | 1 | 20 |
| 2 | 2 | 50 |
| 2 | 1 | 20 |
| 3 | 3 | 100 |
| 3 | 2 | 40 |
Erwartet:
| Id | Month | Salary |
|----|-------|--------|
| 1 | 3 | 90 |
| 1 | 2 | 50 |
| 1 | 1 | 20 |
| 2 | 1 | 20 |
| 3 | 3 | 100 |
| 3 | 2 | 40 |
benutzen ich MAX() und GROUP BY() Funktionen den letzten Monat, jede Gruppe auszuschließen, aber es funktioniert nicht für Id = 2.
Gibt es einen Hinweis, wie Sie die folgende Zeile loswerden können?
| 2 | 2 | 50 |
Vielen Dank im Voraus.
Fast, aber siehe https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me- to-be-a-very-simple-sql-query – Strawberry
Ich entfernte die inkompatiblen Datenbank-Tags Bitte markieren Sie nur mit der von Ihnen verwendeten Datenbank –
Warum sind 'month = 4' Zeilen ausgeschlossen? –