Frage

Ich habe Probleme mit Microsoft Access 2003, ist es zu dieser Erklärung beschweren:

select cardnr
from change
where  year(date)<2009
group by cardnr
having max(time+date) = (time+date) and cardto='VIP'

Was ich tun möchte, ist, für jede unterschiedliche cardnr in der Tabelle ändern, die Zeile mit der neuesten (Zeit + Datum) zu finden, die vor dem Jahr 2009, und wählen Sie dann nur die Zeilen mit cardto = ‚VIP‘.

Der Validator sagt, es ist OK, Zugang sagt, es ist nicht in Ordnung .

Dies ist die Botschaft, die ich erhalten: „Sie haben versucht, eine Abfrage auszuführen, die nicht den angegebenen Ausdruck enthält‚max (Zeit + Datum) = Zeit + Datum und cardto =‘VIP‚und cardnr =‘als Teil eines Aggregats Funktion. "

Könnte jemand bitte erklären, was ich falsch mache und den richtigen Weg, es zu tun? Dank

. Hinweis: Die Feld- und Tabellennamen übersetzt werden und nicht kollidieren mit allen reservierten Worten, ich habe keine Probleme mit den Namen

War es hilfreich?

Lösung

Versuchen Sie es so denken - angewendet wird HAVING nach der Aggregation erfolgt. Daher kann es nicht zu unaggregierter Ausdrücke vergleichen (weder für Zeit + Datum, noch für cardto).

Allerdings bekommt das letzte (Prinzip ist die gleiche Zeile für immer zu anderen aggregiert Funktionen im Zusammenhang als weel) Datum und Uhrzeit Sie so etwas wie tun:

SELECT cardnr
FROM change main
WHERE time+date IN (SELECT MAX(time+date) 
                    FROM change sub
                    WHERE sub.cardnr = main.cardnr AND 
                          year(date)<2009 
                          AND cardto='VIP')

(dieses Datum Teil auf dem Zeitfeld unter der Annahme ist das gleiche für alle Datensätze, mit zwei Feldern für Datum / Uhrzeit ist nicht in Ihrem eigenen Interesse und auch reservierte Worte für die Feldnamen kann in bestimmten Fällen nach hinten losgehen)

Es funktioniert, weil die Unterabfrage auf die Datensätze nur gefiltert wird, dass Sie sich von der äußeren Abfrage interessiert sind.

Die Anwendung des gleichen Jahres (Datum) <200 und cardto = 'VIP' an der äußeren Abfrage kann die Leistung weiter verbessern.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top