Für eine Anwendung, die ich mache, brauche ich die letzte Woche (Montag bis Freitag) und die Details für jeden Tag für jeden Benutzer, den ich in der Datenbank habe.Mysql - Kann ich die Klausel 'have' nach der Klausel 'order by' verwenden?
Für jetzt, meine Abfrage bekommt jeden Tag des Monats beginnend heute (Also, wenn wir die 18. sind, wird es 18.17-16 ... und so weiter) und der Monat davor (falls wir sind die ersten ...)
Aber ich möchte die Auswahl auf die ersten 8 Tage beschränken. Ich lese diese:
http://www.xaprb.com/blog/2006/12/07/how-to-select-the-firstleastmax-row-per-group-in-sql/
Das letzte Beispiel ist, was ich zu tun werde versuchen. Aber das Problem ist, dass ich vorher eine order by
machen muss. Ich muss nach Monaten (DESC), als nach Tagen (DESC) bestellen und dann muss ich die having
tun, um zu bekommen, was ich will. Ich habe es ohne Bestellung versucht, es funktioniert gut, aber es kommt an die falschen Tage. Weil es standardmäßig ASC bestellt.
Nur für das Beispiel hier eine Abfrage ist, dass mein Problem darstellt, dann ist hier, was ich habe:
SELECT
day, id
FROM
myTable
WHERE
(month = EXTRACT(MONTH FROM CURRENT_TIMESTAMP) - 1 OR
month = EXTRACT(MONTH FROM CURRENT_TIMESTAMP) - 2) AND
year = EXTRACT(YEAR FROM CURRENT_TIMESTAMP) AND
day <= EXTRACT(DAY FROM CURRENT_TIMESTAMP)
ORDER BY
month DESC,
day DESC;
Hier ist, was ich will:
set @day := 0, @id:= '';
SELECT
day, id, @day := if(@id= id, @day + 1, 1) as day_number,
@id := id as dummy
FROM
myTable
WHERE
(month = EXTRACT(MONTH FROM CURRENT_TIMESTAMP) - 1 OR
month = EXTRACT(MONTH FROM CURRENT_TIMESTAMP) - 2) AND
year = EXTRACT(YEAR FROM CURRENT_TIMESTAMP) AND
day <= EXTRACT(DAY FROM CURRENT_TIMESTAMP)
ORDER BY
month DESC,
day DESC
HAVING
day_number <= 8;
Aber ich kann nicht ein HAVING
bringen können ein ORDER BY
. Wenn ich die ORDER BY
Klausel entferne, bekomme ich alle Tage für jede ID zwischen 1. und 8.. Aber ich brauche zwischen 18 und 10. (18. ist das aktuelle Datum)
Mit dem Code, den ich in der App habe, wird es nach einer Woche aufhören, so ist es egal, wenn die Auswahl von Sonntag bis Samstag zurückgibt, möchte ich nur mindestens Montag zu haben Freitag. Deshalb habe ich die Nummer "8" genommen, weil die App das nur montags ausführt.
Danke für jede Hilfe/Anregung!
Vielen Dank, ich werde es versuchen! Ich habe nie an eine Unterabfrage gedacht! – anthomaxcool
Ist es möglich, dass die Methode 'day_number' falsch berechnet wird? Es gibt immer 1 – anthomaxcool
@anthomaxcool Haben Sie Ihre Abfrage verwendet, um '@ ID' oder meine Version zu setzen? –