Ich habe eine Frage, die mich verrückt gemacht hat. Es scheint, als ob die Antwort möglich (oder sogar offensichtlich) sein könnte, aber ich bin bis zu diesem Punkt ratlos.SQL-Filterung jedes Abfrageergebnis anders
Hier ist der Zusammenhang. Ich versuche herauszufinden, welche meiner Benutzer sich innerhalb der letzten 90 Tage nach Ablauf ihrer Produktlizenzen angemeldet haben (jetzt, da sie keine Kunden mehr sind). Das Problem ist, dass der Filter relativ zum Ablauf der Lizenzen ist, was für jeden Kunden anders ist. Ich versuchte zunächst eine Abfrage wie folgt zu schreiben:
SELECT customer_id, email
FROM customers
WHERE last_login > ((SELECT license_end FROM customers)-7776000)
Dies ist ein Unix-Zeitstempel sowohl für last_login und license_end, so dass die 7.776.000 ist die Sekunden Umwandlung für 90 Tage. Wie Sie sicherlich bereits festgestellt haben, wird diese Unterabfrage mehr als eine Zeile zurückgeben und fehlschlagen. Hoppla.
In diesem Fall gibt es eine Möglichkeit, alle IDs und E-Mails zurückzugeben, die innerhalb der letzten 30 Tage nach dem Ende ihrer Lizenzen einen last_login-Zeitstempel hatten, da jedes Lizenzenddatum für jeden Kunden unterschiedlich ist?
Ich weiß, ich kann es nur in einer Tabelle tun, aber dieses Puzzle macht mich verrückt. Vielen Dank im Voraus für Ihre Expertise !!
Ich glaube, meine Verwirrung kam von der Tatsache, die ich versuchte zu tun a '((SELECT unix_timestamp (license_end) FROM Kunden) -7776000)', aber es stellt sich heraus, dass die 'SELECT' und' FROM' vollständig unnötig waren. (Diese Spalte ist eigentlich ein Zeitstempel, nicht in Unix.) Das hat definitiv funktioniert. Vielen Dank!! – user7484388
Wenn beide Spalten Zeitstempel sind, verwenden Sie 'DATE_SUB()', um ein Intervall zu subtrahieren – Barmar