2017-03-24 6 views
0

Ich bin ein elementarer Benutzer von MSSQL. Ich kann meine Anfrage nicht richtig abschließen. Es sollte ein einfaches Problem sein.Einfache Abfrage in MSSQL. SELECT

Hier ist mein Code:

SELECT Pass_in_trip.date, Count(date) as numbOfPassengers 
From Pass_in_trip, Trip 
WHERE (Trip.trip_no = Pass_in_trip.trip_no AND Trip.town_from='Rostov') 
Group BY date 
HAVING COUNT(date) = 3 

diese Weise ist es funktioniert. Aber ich möge COUNT (Datum) mit MAX (COUNT (Datum)) vergleichen, und dann bekomme ich ein Problem:

Kann nicht eine Aggregatfunktion auf einem Ausdruck führt ein Aggregat oder eine Unterabfrage enthält.

+3

[Use explizite Verknüpfungen] (http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style-joins.aspx) Beginnen Sie mit – scsimon

+0

Sie beschreiben Ihr Problem nicht richtig. Was würde max (count()) tun? Da Sie eine Gruppe haben, ist die Anzahl nur ein Wert, und die maximale Anzahl davon wäre immer noch die gleiche Zahl. –

Antwort

1

Ich denke, das könnte sein, was Sie suchen.

Ein allgemeiner Tabellenausdruck hilft, die Abfrage nicht zu wiederholen.

WITH cte as 
    (
    SELECT Pass_in_trip.date, Count(date) as numbOfPassengers 
    FROM Pass_in_trip 
    INNER JOIN Trip 
     ON Trip.trip_no = Pass_in_trip.trip_no 
    WHERE Trip.town_from='Rostov' 
    GROUP BY date 
) 
SELECT date, numbOfPassengers 
FROM cte 
WHERE numbOfPassengers = (SELECT MAX(numbOfPassengers) FROM cte)