Ich habe versucht, aber nur kann nicht die Ergebnisse, so dass ich um Hilfe hier bitten. Ich habe eine Log-Tabelle für Benutzer auf Computern. Ich möchte zählen, wie oft sich ein Benutzer an einem Computer angemeldet hat, und dann den Maximalwert abrufen, sodass der maximale Benutzer als primärer Benutzer des Computers gilt.SQL zurück alle Felder von max der Anzahl
-1
A
Antwort
0
select Comp, [User], count([User]) as MaxCnt
from TableHere
group by Comp, [User]
1
Je nachdem, was verwendeten DBMS, können Sie eine Fensterfunktion ROW_NUMBER() verwenden, um die Zählungen pro comp Rang. Dann ziehe die höchste Bewertung.
SELECT
Comp,
[User],
Cnt
FROM
(SELECT
Comp,
[User],
COUNT(1) AS Cnt,
ROW_NUMBER() OVER (PARTITION BY Comp ORDER BY Count(1) DESC) AS Rnk
FROM UserHist
GROUP BY Comp, [User]) BaseTable
WHERE Rnk = 1
1
Sie können die Anzahl und dann wählen Sie die größte. Dies verwendet einen CTE, um die Daten mit der Anzahl und dem Rang abzurufen.
WITH CTECOMP AS
(
SELECT COMP, [user], COUNT([USER]) [USERCOUNT],
RANK() OVER (PARTITION BY COMP ORDER BY COUNT([USER]) DESC) [MYRANK]
FROM @TableData
GROUP BY comp, [user]
)
SELECT *
FROM CTECOMP
WHERE MYRANK = 1
Welche Tabellen mit welchen exakten Spalten haben Sie? Welche rdbms verwendest du? Auch was hast du bisher probiert? – istovatis
siehe [tag: greatest-n-pro-group] für viele Antworten auf diese Art von Frage. Bitte lesen Sie auch dies: http://meta.stackoverflow.com/questions/285551/why-may-i-not-upload-images-of-code-on-so-when-asking-a-question/285557#285557 Warum ist es einfacher, einen Screenshot Ihres Editors zu erstellen, ihn lokal zu speichern, ihn in SO hochzuladen und ihn in der Frage zu verlinken, dann einfach den Inhalt Ihres Editors zu kopieren und einzufügen. Und sagen Sie uns, welches DBMS Sie verwenden. –
Verwenden von SQL 2012 auf dem Back-End und tatsächlich nur MS Access als Abfrage-Engine verwenden. Ich habe Folgendes versucht, aber es gibt nur eine Zeile statt der Ergebnisse, die ich versuche zu erhalten, wie oben gezeigt (uh stellt die Tabelle UserHist dar.) SELECT uh.computer_id, uh.user_name, Count (uh.user_name) VON uh GROUP BY uh.computer_id, uh.user_name HAVING Count (uh.user_name) = (SELECT Max (a.cnt) FROM (SELECT uh.computer_id, COUNT (uh.user_name) AS cnt FROM uh GROUP BY uh.computer_id , uh.user_name) Als a) ' – Tom