Benutzer mit den meisten Antworten
letzten Datensatz einer Selektion

Frage
-
Hallo,
ich habe in einer Tabelle "Projekte" Daten zu unseren Aufträgen. In dieser Tabelle erscheinen natürlich Kunden mehrfach, da sie häugiger bei uns als Auftraggeber erscheinen.
Ich soll nun aus dieser Tabelle eine Liste, die mir nur das letzte angelegte Projekt ausgibt. Ein Feld "Erstanlage" kann ich dazu heranziehen, nur wie?
Gruß
Heiko
Antworten
-
Hallo,
Nehmen wir mal an, Deine Tabelle "projekte" hat die 3 relevanten Felder "Kunde", "Projekt", "Erstanlage". Dann könntest Du auf Kunden aggregieren und das Max von Erstanlage = letztes Projekt selektieren. Darüber könntest Du joinen und die Projektdaten selbst ermitteln; geht aber nur, wenn jeder Kunde max. ein Projekt je Tage hat .... oder aber es steht noch die Uhrzeit in ErstAnlage
SELECT * FROM projekte AS P INNER JOIN (SELECT Kunde, Max(ErstAnlage) AS LetzteAnlage FROM projekte GROUP BY Kunde) AS SUB ON P.Kunde = SUB.Kunde AND P.ErstAnlage = SUB.LetzteAnlage
Olaf Helper
[ Blog] [ Xing] [ MVP]- Als Antwort markiert mxyptlk Montag, 12. August 2013 10:18
Alle Antworten
-
-
Hallo,
Nehmen wir mal an, Deine Tabelle "projekte" hat die 3 relevanten Felder "Kunde", "Projekt", "Erstanlage". Dann könntest Du auf Kunden aggregieren und das Max von Erstanlage = letztes Projekt selektieren. Darüber könntest Du joinen und die Projektdaten selbst ermitteln; geht aber nur, wenn jeder Kunde max. ein Projekt je Tage hat .... oder aber es steht noch die Uhrzeit in ErstAnlage
SELECT * FROM projekte AS P INNER JOIN (SELECT Kunde, Max(ErstAnlage) AS LetzteAnlage FROM projekte GROUP BY Kunde) AS SUB ON P.Kunde = SUB.Kunde AND P.ErstAnlage = SUB.LetzteAnlage
Olaf Helper
[ Blog] [ Xing] [ MVP]- Als Antwort markiert mxyptlk Montag, 12. August 2013 10:18
-
Hallo Björn,
damit bekomme ich aber dann zu jedem Kunden nicht nur einen Datensatz, sondern "erkenne bloß" den entsprechenden Datenbsatz. Den müsste ich mir dann holen und mit dem nächsten Kunden weiter machen. Ich würde aber gern mit einer Abfrage nur die für letzten Projekte eines jeden Kunden erhalten.
-
Hallo Olaf,
das sieht interessant aus, aber leider bekomme ich das Query nicht zum laufen.
Vielleilcht mal ein Datenschnipsel zur besseren Erklärung
CREATE TABLE [dbo].[Proj]( [Name] [varchar](50) NOT NULL, [Kurzname] [varchar(50) null, [Kurztext] [varchar](50) NULL, [Kostenstelle] [int] NULL, [Erstanlagedatum] [datetime] NULL) INSERT proj(name,kurzname,kurztext,kostenstelle,erstanlagedatum) VALUES('10513/07','Solent','MK-Halterung 100x4 Gießkopf','214',convert(datetime,'2013-01-24 07:46:08.000',121)) INSERT proj(name,kurzname,kurztext,kostenstelle,erstanlagedatum) VALUES('11037','Givaudan','CJ+ 10 Kugelhähne DN25 + Dichtungssätze','122',convert(datetime,'2013-01-15 08:40:40.000',121)) INSERT proj(name,kurzname,kurztext,kostenstelle,erstanlagedatum) VALUES('11100','Solent','MK-diverse Kleinaufträge','214',convert(datetime,'2013-01-10 09:11:07.000',121)) INSERT proj(name,kurzname,kurztext,kostenstelle,erstanlagedatum) VALUES('11100/01','Solent','MK-Umbau der Beheizung Rückschmelzer Linie 1','214',convert(datetime,'2013-01-24 12:08:05.000',121))
Die Kundennamen stehen im Feld NAME2. Setze ich meine Daten ein:
SELECT Name, Kurzname, Name2, Kurztext,Erstanlagedatum, Kostenstelle, Vertreter, Eigentümer FROM projekte AS P INNER JOIN (SELECT Kurzname, Max(Erstanlagedatum) AS LetzteAnlage FROM projekte GROUP BY Kurzname) AS SUB ON P.Kurzname = SUB.Kurzname AND P.Erstanlagedatum = SUB.LetzteAnlage
meckert er bei dem Feld Kurztext
-
meckert er bei dem Feld Kurztext
Weil das Feld sowohl proj Alias P als auch im SUB mit gleichem Namen vorkommt; einfach richtig qualifizieren, z.B. mit p.Kurzname, so wie ich es schon im JOIN gemacht hatte.
SELECT P.Name, P.Kurzname, P.Kurztext, P.Erstanlagedatum, P.Kostenstelle FROM [Proj] AS P INNER JOIN (SELECT Kurzname, Max(Erstanlagedatum) AS LetzteAnlage FROM [Proj] GROUP BY Kurzname) AS SUB ON P.Kurzname = SUB.Kurzname AND P.Erstanlagedatum = SUB.LetzteAnlage
Olaf Helper
[ Blog] [ Xing] [ MVP]