none
letzten Datensatz einer Selektion RRS feed

  • 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

    Montag, 12. August 2013 08:42

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
    Montag, 12. August 2013 09:17

Alle Antworten

  • Hi Heiko,

    benutze doch GroupBy auf Kunde und wähle dann den 1. Datensatze (ich denk jetzt das die Aufträge noch irgendwo einen Zeitstempel (Datum) haben nach dem du sortieren kannst.

    Schau dir dazu mal die Links an:

    Link 1

    Link 2

    MFG

    Björn

    Montag, 12. August 2013 08:58
  • 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
    Montag, 12. August 2013 09:17
  • 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.

    Montag, 12. August 2013 09:29
  • 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


    Montag, 12. August 2013 10:02
  • Nun klappts! Vielen Dank
    Montag, 12. August 2013 10:17
  • 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]

    Montag, 12. August 2013 10:22