Announcement

Collapse
No announcement yet.

SQL Abfrage

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • SQL Abfrage

    Hallo,
    ich möchte folgendes Ergebnis erreichen:

    Eine Liste der letzten zehn User die sich an der SoftwareXY angemeldet haben. Liste sollte haben Anmeldedatum, Username, Hostname und Anmeldedauer. Absteigend nach Anmeldedatum sortiert.

    Meine Abfrage sieht folgendermaßen aus:

    SELECT Top 10 CONVERT(varchar,Anmeldung,102) AS Anmeldedatum, Username, Hostname, CONVERT(varchar,Abmeldung-Anmeldung,108) AS Anmeldedauer FROM Tabelle xyz ORDER BY [Anmeldung] DESC;

    Das Ergebnis ist so schon nicht schlecht.
    Aber dabei kann es sein, dass unter den letzten 10 Anmeldungen ein User 5 mal auftaucht. Ich hätte aber gerne, dass die letzten 10 Benutzer, die sich angemeldet haben angezeigt werden. Also derjenige, der sich 5x angemeldet hat, soll nur 1x auftauchen, dafür dann 4 user mehr.

    Hat da jemand eine Idee? Schonmal vielen Dank im Voraus.

    Gruß
    Andreas

  • #2
    DISTINCT sollte funktionieren

    Comment


    • #3
      Hmm, an welcher Stelle?
      Ich habe das schon ausprobiert und Fehlermeldungen bekommen.

      z.B. folgende:
      ORDER BY Elemente müssen in der Auswahlliste angezeigt werden, wenn SELECT DISTINCT angegeben wird.

      Comment


      • #4
        Hi,

        du solltest Deinem Select folgende Bedingung anhängen:

        where xyz anmeldung=(select max(abc.Anmeldung) from Tabelle abc
        where xyz username=abc.username)

        Gruß
        docendo discimus

        Comment


        • #5
          Hallo,
          ich habe irgendwie ein Verständnis Problem welche Tabelle Du mit abc meinst.
          Alle Daten, die ich brauche kommen aus einer Tabelle, nämlich Tabelle xyz.
          In welchem Verhältnis steht abc zu xyz?
          Danke.
          Gruß
          Andreas

          Comment


          • #6
            Hallo Andreas,

            MS SQL Server, stimmt's?

            ORDER BY Elemente müssen in der Auswahlliste angezeigt werden, wenn SELECT DISTINCT angegeben wird
            Der SQL sagt Dir schon, was zu machen ist ... also auch machen.

            Geht so (etwas vereinfacht):

            [highlight=SQL]SET NOCOUNT ON

            CREATE TABLE #Anm
            (Anmeldung datetime NULL,
            Username varchar(100) NULL,
            Hostname varchar(100) NULL,
            );
            GO

            INSERT INTO #Anm VALUES(GetDate(), 'A', 'A')
            INSERT INTO #Anm VALUES(GetDate(), 'A', 'A')
            INSERT INTO #Anm VALUES(GetDate(), 'B', 'B')
            INSERT INTO #Anm VALUES(GetDate(), 'A', 'A')
            INSERT INTO #Anm VALUES(GetDate(), 'C', 'C')
            INSERT INTO #Anm VALUES(GetDate(), 'D', 'D')
            INSERT INTO #Anm VALUES(GetDate(), 'A', 'A')
            INSERT INTO #Anm VALUES(GetDate(), 'A', 'A')
            INSERT INTO #Anm VALUES(GetDate(), 'E', 'E')
            INSERT INTO #Anm VALUES(GetDate(), 'F', 'F')
            INSERT INTO #Anm VALUES(GetDate(), 'G', 'G')
            INSERT INTO #Anm VALUES(GetDate(), 'H', 'H')
            GO


            SELECT DISTINCT Top 5 CONVERT(varchar,Anmeldung,102) AS Anmeldedatum,
            Username, Hostname
            FROM #Anm
            ORDER BY CONVERT(varchar,Anmeldung,102) DESC;

            DROP TABLE #Anm[/highlight]
            Olaf Helper

            <Blog> <Xing>
            * cogito ergo sum * errare humanum est * quote erat demonstrandum *
            Wenn ich denke, ist das ein Fehler und das beweise ich täglich

            Comment


            • #7
              Hi,

              zum Verständnis:

              laut Deinem Statement heißt Deine Tabelle "Tabelle" mit dem Alias "xyz".
              Ich meine auch die Tabelle "Tabelle" aber mit dem Alias "abc". Wenn man Tabellen mit sich selbst vergleicht muss man zwei verschiedene Aliase verwenden.

              Gruß
              docendo discimus

              Comment


              • #8
                Hi Olaf,

                wie willst Du mit Deinem Statement verhindern, dass ein User, der sich am selben Tag mehrmals angemeldet hat, doppelt erscheint?
                docendo discimus

                Comment


                • #9
                  Hi, ich kann leider nicht editieren.
                  Ich meinte natürlich an verschiedenen Tagen, und der gleichzeitig unter die TOP 10 fällt.
                  docendo discimus

                  Comment


                  • #10
                    So habe ich zunächst die Aufgabenstellung verstanden.

                    Meistens will man ja wissen, wann sich welche Leute angemeldet haben; sonst macht auch das Datum im Resultset wenig Sinn.
                    Olaf Helper

                    <Blog> <Xing>
                    * cogito ergo sum * errare humanum est * quote erat demonstrandum *
                    Wenn ich denke, ist das ein Fehler und das beweise ich täglich

                    Comment

                    Working...
                    X