2017-04-02 5 views
1

Ich habe geschrieben, eine Abfrage, die die Gründe und die Menge der ausgewählten Gründe, warum Menschen stornieren ihre Aufträge pro Zustand pro Jahr zeigt:Wie wählen Sie die höchste Anzahl()?

SELECT DISTINCT LEFT(k.wijk,2) AS state, 
     YEAR(a.eind_dt) AS year, 
     opzegreden AS reason, 
     count(*) AS amount 
FROM  klant AS k 
JOIN  abon AS a 
ON  k.klant_id = a.lezer 
WHERE opzegreden IS NOT NULL 
GROUP BY LEFT(k.wijk,2), year(a.eind_dt), opzegreden 
ORDER BY state, year, reason; 

, die dieses Ergebnis atm gibt: Current result

Nun ist die einzige Was ich nicht zu machen vermag, ist, den Grund zu zeigen, der pro Staat und Jahr am meisten ausgewählt wird. Das wäre Grund 14 mit meinem aktuellen Ergebnis.

Kann mir bitte jemand helfen?

+0

sollten Sie einige Beispiel werfen, Daten.Wenn ich Partitionsfunktion in meiner Abfrage verwenden, dann Warum ich Gruppierung, Sortierung nach etc.Also verwenden müssen „Speichern Wert wie‚k.wijk AS Zustand‘schlecht Idee Sie sollten ID sofort in der Tabelle speichern. – KumarHarsh

Antwort

1

Sie können row_numbertop with ties mit Fensterfunktion paaren, um die Zeilen mit max Menge pro Zustand pro Jahr.

select top 1 with ties LEFT(k.wijk, 2) as state, 
    YEAR(a.eind_dt) as year, 
    opzegreden as reason, 
    count(*) as amount 
from klant as k 
join abon as a on k.klant_id = a.lezer 
where opzegreden is not null 
group by LEFT(k.wijk, 2), 
    year(a.eind_dt), 
    opzegreden 
order by row_number() over (
     partition by state, year order by amount desc 
     ); 
+0

Oh wow, das funktioniert perfekt. Vielen Dank. :) –

0

Sie könnten versuchen, diese: -

SELECT 
     state, 
     year, 
     reason, 
     max(amount) 
    FROM 
    (
    SELECT DISTINCT LEFT(k.wijk,2) AS state, 
    YEAR(a.eind_dt) AS year, 
    opzegreden AS reason, count(*) AS amount 
    FROM klant AS k 
    JOIN abon AS a 
    ON k.klant_id = a.lezer 
    WHERE opzegreden IS NOT NULL 
    GROUP BY LEFT(k.wijk,2), year(a.eind_dt), opzegreden 
    ORDER BY state, year, reason 
    ) d 
GROUP BY 
    state, 
    year, 
    reason; 
Verwandte Themen