Ich möchte die Top 10 Datensätze aus jedem Abschnitt in einer Abfrage zurückgeben. Kann jemand helfen, wie es geht? Abschnitt ist eine der Spalten in der Tabelle.
Die Datenbank ist SQL Server 2005. Ich möchte die Top 10 nach eingegebenem Datum zurückgeben. Abschnitte sind geschäftlich, lokal und Feature. Für ein bestimmtes Datum möchte ich nur die obersten (10) Geschäftszeilen (letzter Eintrag), die obersten (10) lokalen Zeilen und die obersten (10) Funktionen.
Antworten:
Wenn Sie SQL 2005 verwenden, können Sie so etwas tun ...
Wenn Ihre RankCriteria Verbindungen hat, können Sie mehr als 10 Zeilen zurückgeben, und Matts Lösung ist möglicherweise besser für Sie.
quelle
DENSE_RANK
ich keine Lücken in der Nummerierung. +1In T-SQL würde ich Folgendes tun:
quelle
ROW_NUMBER
Funktion implementiert . Zum Beispiel habe ich diese Lösung in SQLite verwendet.Dies funktioniert unter SQL Server 2005 (bearbeitet, um Ihre Klarstellung widerzuspiegeln):
quelle
quelle
r
. Fest.Ich mache es so:
Update: Dieses Beispiel für GROUP BY funktioniert nur in MySQL und SQLite, da diese Datenbanken in Bezug auf GROUP BY zulässiger sind als Standard-SQL. Die meisten SQL-Implementierungen erfordern, dass sich alle Spalten in der Auswahlliste, die nicht Teil eines Aggregatausdrucks sind, auch in GROUP BY befinden.
quelle
Wenn wir SQL Server> = 2005 verwenden, können wir die Aufgabe mit nur einer Auswahl lösen :
quelle
top 1
mit dercase
Anweisung in derorder by
Klausel funktioniert, die 0 oder 1 zurückgibt?Wenn Sie die Abschnitte kennen, können Sie Folgendes tun:
quelle
Ich weiß, dass dieser Thread ein bisschen alt ist, aber ich bin gerade auf ein ähnliches Problem gestoßen (wählen Sie den neuesten Artikel aus jeder Kategorie aus), und dies ist die Lösung, die ich gefunden habe:
Dies ist der Lösung von Darrel sehr ähnlich, überwindet jedoch das RANK-Problem, das möglicherweise mehr Zeilen als beabsichtigt zurückgibt.
quelle
JOIN
anstelle von optimiert werdenLEFT JOIN
, da esTopCategoryArticles
ohne einen entsprechendenArticle
Datensatz niemals einen Datensatz geben wird .Versuchte das Folgende und es funktionierte auch mit Krawatten.
quelle
Wenn Sie eine nach Abschnitten gruppierte Ausgabe erstellen möchten, zeigen Sie nur die obersten n Datensätze aus jedem Abschnitt wie folgt an:
... dann sollte das Folgende ziemlich allgemein mit allen SQL-Datenbanken funktionieren. Wenn Sie die Top 10 möchten, ändern Sie einfach die 2 gegen Ende der Abfrage in eine 10.
So richten Sie ein:
quelle
Könnte der UNION- Operator für Sie arbeiten? Haben Sie eine SELECT für jeden Abschnitt, dann UNION sie zusammen. Ich denke, es würde nur für eine feste Anzahl von Abschnitten funktionieren.
quelle
F) Finden von TOP X-Datensätzen aus jeder Gruppe (Oracle)
6 Zeilen ausgewählt.
quelle
Während die Frage nach SQL Server 2005 war, haben die meisten Menschen bewegten auf und wenn sie diese Frage nicht finden, was die bevorzugte Antwort in anderen Situationen sein könnte , ist eine Verwendung
CROSS APPLY
als in diesem Blog - Eintrag dargestellt .Diese Abfrage umfasst 2 Tabellen. Die Abfrage des OP umfasst nur eine Tabelle. In diesem Fall ist eine auf Fensterfunktionen basierende Lösung möglicherweise effizienter.
quelle
Sie können diesen Ansatz ausprobieren. Diese Abfrage gibt 10 bevölkerungsreichste Städte für jedes Land zurück.
quelle