Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Meiste Logins pro Computer

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von kroto, 10 November 2016.

  1. kroto

    kroto Neuer Benutzer

    Hallo Zusammen,

    ich hoffe hier kann mir jemand weiterhelfen.
    Und zwar habe ich eine Tabelle in der viele Daten bezüglich Anmeldungen stehen. Und ich möchte um den Hauptbenutzer zuordnen zu können herausfinde, wer sich wie oft an welchen PC Angemeldet hat.

    Ich habe aus dieser Tabelle mit einem Query jetzt einen Dreispalter gemacht.

    Select a.[Computername]
    ,a.Username
    a.[Anzahl Logins]

    From
    (SELECT
    [Computername]
    ,[Username]
    ,( Count ([Computername))AS 'Anzahl Logins'
    FROM Daten WITH (NOLOCK)

    Group by
    [Computername]
    ,[Username]
    ,[Anzahl Logins]


    ) AS A

    Dieser sieht wie folgt aus.


    Computername Username Anzahl Logins
    PC1 Axel 3
    PC1 Petra 2
    PC2 Winni 4
    PC2 Mustaf 4
    PC3 Gustaf 3
    ... ... ...
    Jetzt weiß ich nicht wie ich es schaffe, aus diesen Daten für jeden PC den User mit den meisten Logins herauszubekommen. Anzahl Logins kann gleich sein, dann kann er ruhig beide Benutzer ausgeben.

    Vielen Dank schon mal an alle die Versuchen zu helfen.

    Gruß kroto
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Du könntest rank() verwenden.

    Code:
    test=*# select * from kroto ;
     pc  |  name  | anzahl
    -----+--------+--------
     pc1 | axwl  |  3
     pc1 | petra  |  2
     pc2 | winni  |  4
     pc2 | mustaf |  4
     pc3 | gustaf |  3
    (5 Zeilen)
    
    test=*# select *, rank() over (partition by pc order by anzahl desc) from kroto ;
     pc  |  name  | anzahl | rank
    -----+--------+--------+------
     pc1 | axwl  |  3 |  1
     pc1 | petra  |  2 |  2
     pc2 | winni  |  4 |  1
     pc2 | mustaf |  4 |  1
     pc3 | gustaf |  3 |  1
    (5 Zeilen)
    
    test=*# select pc, name, anzahl from (select *, rank() over (partition by pc order by anzahl desc) from kroto) tmp where rank = 1 ;
     pc  |  name  | anzahl
    -----+--------+--------
     pc1 | axwl  |  3
     pc2 | winni  |  4
     pc2 | mustaf |  4
     pc3 | gustaf |  3
    (4 Zeilen)
    
    test=*#
    
     
  3. kroto

    kroto Neuer Benutzer

    Hey akretschmer.

    Vielen Dank ich kannte die Rank Funktion nicht. hat Super funktioniert.

    Gruß kroto
     
  4. ukulele

    ukulele Datenbank-Guru

    Das ginge z.B. so:
    Code:
    SELECT   t.*
    FROM   (
    
    SELECT   ROW_NUMBER() OVER (PARTITION BY [Computername] ORDER BY count(*) DESC) AS zeile,
         [Computername],
         [Username],
         count(*) AS [Anzahl Logins]
    FROM   Daten
    GROUP BY [Computername],[Username]
    
         ) t
    WHERE   t.zeile = 1
    PS: Sry hab die Posts nicht gesehen.
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden