Ich versuche, eine Abfrage für die folgende Situation zu erstellen, aber ich kann es einfach nicht vom konzeptionellen zum tatsächlichen zu bekommen.SQL-Unterabfragen für Teilnahme Dieser Monat und letzter Monat
Ich habe drei Tabellen:
- Profil (ID, First_Name, Last_Name)
- Ereignis (ID, Datum)
- Anwesenheit (Profile_ID, Event_ID)
Ich bin Ich versuche, eine Liste der Profile zu erhalten, die diesen Monat und letzten Monat besucht haben.
Bislang habe ich daran gedacht, beide Monate zu zählen und sie nur auszuwählen, wenn sie größer als 1 sind, aber ich habe es noch nicht ganz zum Laufen gebracht.
Etwas wie:
SELECT * FROM Profile
LEFT OUTER JOIN Attendance ON Profile.ID = Attendance.Profile_ID
LEFT OUTER JOIN Event ON Attendance.Event_ID = Event.ID
WHERE [subquery to confirm attendance of this Profile_ID in this month/year > 1]
AND [subquery to confirm attendance of this Profile_ID in last month/year > 1]
So ist die erste Frage, ob ich über das Problem richtig denke und in einer guten Richtung bewege. Die zweite Frage ist, wie man diese Unterabfragen richtig macht - ich kann leicht etwas wie SELECT * FROM Attendance WHERE MONTH(Date) = 12 AND YEAR(Date) = 2016
machen, aber das würde eine Liste aller Besucherzahlen zurückgeben. Was ich wirklich will, ist eine Liste nur der Anwesenheit für jede ID einzeln - also wenn ich auf ID 4 schaue, möchte ich überprüfen, ob diese bestimmte ID eine Anwesenheit in diesem Monat und letzten Monat hat, aber ich bin nicht Sicher, wie man das zur WHERE-Klausel hinzufügt.
1) haben - das ist eine Methode. Ein anderer besteht darin, verschiedene Monate zu zählen, deren Gesamtzahl der Anzahl der Argumente entspricht. Für 2) siehe http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-very-simple -sql-query – Strawberry