Hilfe zu SQL Abfrage

ArcaDe

Mitglied
Liebe Gemeinde,

ich hoffe mir kann jemand bei meinem Queryproblem helfen.
Es geht um einen SWD Report.

Ich habe eine Tabelle die folgendermassen aussieht:

Nun möchte ich das er mir den letzten aktuellen Status, anhand des Datums für alle Rechner als Datensatz ausgibt.
Bin echt schon am verzweifeln.
Anbei ein Screenshot. Unten die Ausgabe die ich frustriert versuche zu erreichen.

9f5e3c13.jpg


Vielen Dank im Voraus
 
Zuletzt bearbeitet:
Hi.

Du müßtest demnach nach dem Computernamen gruppieren und nur die Einträge anzeigen, die eine LastModTime von MAX(LastModTime) haben.

Gruß
 
Hallo deepthroat,

genau das habe ich versucht, jedoch gibt er mir dann auch jedesmal die verschiedenen Results zu dem entsprechenden Rechner. Somit habe ich wieder zu viele Datensätze.
Mein Ansatz war (kurzform(.

Select
ComputerName,
max(LastModTime) as MAX_Datum

From TABLE

Group By ComputerName.

Die Ausgabe wäre perfekt, jedoch wenn ich zum Beispiel nur noch die Spalte Result einbinde erhalte ich wieder sämtlich "Results" pro Computer :(. Oder wie füge ich jetzt noch die anderen Spalten hinzu. Ich packe diese wahrcheinlich immerzu in die Falsche Sektion (Group by ?).

Lieben Gruß und danke für die Antwort
 
Hallo deepthroat,

genau das habe ich versucht, jedoch gibt er mir dann auch jedesmal die verschiedenen Results zu dem entsprechenden Rechner. Somit habe ich wieder zu viele Datensätze.
Mein Ansatz war (kurzform(.

Select
ComputerName,
max(LastModTime) as MAX_Datum

From TABLE

Group By ComputerName.

Die Ausgabe wäre perfekt, jedoch wenn ich zum Beispiel nur noch die Spalte Result einbinde erhalte ich wieder sämtlich "Results" pro Computer :(. Oder wie füge ich jetzt noch die anderen Spalten hinzu. Ich packe diese wahrcheinlich immerzu in die Falsche Sektion (Group by ?).
Du zeigst hier immer alle Datensätze an, du müßtest die Datensätze mit einer HAVING Klausel filtern.

Gruß
 
Hallo,

ich schau mal wo ich etwas wie ein Tutorial dazu finde. Danke Dir mt dem 'having' Tip.
Hoffe der hilft mir.

Lieben Gruß
 
Hi.

Bitte schreib keine PN wenn es um ein Problem geht bei dem alle helfen können.

Und vergiss was ich gesagt habe. HAVING ist hier fehl am Platz.

Versuch's mal so:
SQL:
select * from table 
  where lastmodtime = ( 
    select max(lastmodtime) from table as t1
      where computername = table.computername
  );
Gruß
 
Sorry mit der PN. Aber ich hätte Lösungen etc. hier gepostet.

Das sieht schon einmal sehr gut aus und kommt dem Ziel sehr nahe.
Nun habe ich nur noch das Problem das ich nun das Feld LastModTime irgendwe noch mit dem Feld PackageName verbinde.
Den Rechnern sind ja einiges an Software zugewiesen.
Mit dem Query zeigt er nun die aktuellste Software die zuletzt installiert wurde laut LastModTime. Ich hatte hier im Scrrenshot einfach nur nach dem Shockwave gesucht.

Wenn ich zum Beispiel ein Query auf ein anderes Softwarepaket mache gibt er mir natürlich nur die Pakete aus mit dem aktuellsten Eintrag.

Ich hoffe Du verstehst was ich damit sagen will. Infos reiche ich gerne nach.
Aber der Lösungsansatz sieht schon super aus.

Vielen Dank
 
Hi,

ich denke, diese zusätzliche Bedingung müsstest Du dann mit in die Unterabfrage packen:

SQL:
SELECT * FROM TABLE
  WHERE lastmodtime = (
    SELECT max(lastmodtime) FROM TABLE AS t1
      WHERE computername = TABLE.computername
         AND packagename = TABLE.packagename
  );

LG
 
Hi,

Okay das war auch mein Ansatz.
Teilweise hatte ich noch von der Installation vorher welche eigentlich unr eine Verknüpfung installieren waren. Somit auch noch in der Ausgabe waren.
Ich habe das jetzt explizit noch einmal angegeben.
Wollte nur wissen ob das korrek ist. Er gibt mir dann die richtigen Daensätze raus.

Code:
 SELECT * FROM {TABLE} 

WHERE 
LastModTime = (

      SELECT max(lastmodtime) FROM {TABLE} AS t1

Where ComputerName = {TABLE} .ComputerName
        AND PackageName = {TABLE} .PackageName
        AND PackageName = '{SoftwareName}'
      )

nun sieht alles so aus wie es soll.
Für alle die ein ähnliches Problem haben bitte die { } beachten und ersetzen.

Vielen Dank noch einmal an alle beteiligten.
 
Zurück