Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   SQL Select Statement, letzten Datensatz markieren (https://www.delphipraxis.net/167981-sql-select-statement-letzten-datensatz-markieren.html)

Piro 28. Apr 2012 16:20

Datenbank: SQL 2005 • Version: Express • Zugriff über: ADO

SQL Select Statement, letzten Datensatz markieren
 
Moin zusammen,

ich habe folgende Struktur für meine Log-Tabelle. Die Tabelle dient als Protokoll für einen InsertProzess für Daten.

Code:
ProjektName,Startdatum,Enddatum,Anzahl
Hier sind die Beispieldaten.
Code:
Projekt1,20.04.2012 12:00:00,20.04.2012 12:30:00,10
Projekt1,22.04.2012 06:30:00,22.04.2012 07:30:00,100
Projekt2,24.04.2012 06:30:00,24.04.2012 07:30:00,100
Projekt2,24.04.2012 08:30:00,24.04.2012 09:30:00,120
Projekt3,25.04.2012 06:30:00,25.04.2012 07:30:00,100
Jetzt möchte ich gerne immer dem letzten Datensatz in Bezug auf den ProjektNamen und das Startdatum ein Kennzeichen geben. So dass man später mal nach diesem Kennzeichen filtern kann für Auswertungen.

Das Ergebnis sollte dann so aussehen, welches ein VIEW werden würde.
Code:
Projekt1,20.04.2012 12:00:00,20.04.2012 12:30:00,10,
Projekt1,22.04.2012 06:30:00,22.04.2012 07:30:00,100,X
Projekt2,24.04.2012 06:30:00,24.04.2012 07:30:00,100,
Projekt2,24.04.2012 08:30:00,24.04.2012 09:30:00,120,X
Projekt3,25.04.2012 06:30:00,25.04.2012 07:30:00,100,X
Ich mir kann einer von Euch weiterhelfen, da meine SQL Kenntnisse sehr beschränkt sind.

Vielen Dank im Voraus.
Sven

mkinzler 28. Apr 2012 16:25

AW: SQL Select Statement, letzten Datensatz markieren
 
Reicht auch eine Sortierung?

SQL-Code:
select
    ProjektName,Startdatum,Enddatum,Anzahl
from
    <Tabelle>
order by
    ProjektName,Startdatum;

Piro 28. Apr 2012 16:29

AW: SQL Select Statement, letzten Datensatz markieren
 
Hatte ich auch schon überlegt aber ich brauche diese Kennzeichnung, da Sie in einem anderen System verwendet werden soll.

Bummi 28. Apr 2012 17:04

AW: SQL Select Statement, letzten Datensatz markieren
 
Ich habe gerade keinen Rechner mit Testmöglichkeiten zur Hand

1. Sicht

Code:
Create View V_Blub as
Select ProjektName,Max(Enddatum) as EndDatum from A,'X' as Kennzeichen
Group by ProjektName
2.
Code:
Select A.*,V_Blub.Kennzeichen from A
Left Join V_Blub on V_Blub.ProjektName=A.ProjektName and V_Blub.EndDatum =A.EndDatum

haentschman 28. Apr 2012 17:15

AW: SQL Select Statement, letzten Datensatz markieren
 
Hallo...

Zitat:

Projekt1,22.04.2012 06:30:00,22.04.2012 07:30:00,100,X
...gibt es für das X eine Tabellenspalte ?
Zitat:

da Sie in einem anderen System verwendet werden soll
Soll das "select" (View) auf dem anderen System ausgeführt werden ? In welcher Form werden die Daten sonst übergeben ?

Piro 28. Apr 2012 17:22

AW: SQL Select Statement, letzten Datensatz markieren
 
Da habe ich euch wohl etwas verwirrt.

Das andere System ist IBM Cognos welches seine Daten aus einem View holt, den ich auf der Datenbank selbst erstellt habe.

Also ich brauche nur ein Select Statement, dass die Kennzeichnung eines jeden letzten Datensatzen macht in Bezug auf ProjektNamr und das letzte Startdatum.

Danke.

Furtbichler 29. Apr 2012 06:59

AW: SQL Select Statement, letzten Datensatz markieren
 
SQL-Code:
Select *,
  case when (select max(StartDatum) from Tabelle x where x.ProjektName = y.ProjektName) = y.StartDatum
    then 'X'
    else' '
  end as IsLast
from Tabelle y
oder
SQL-Code:
Select *,
  case when exists (select * from Tabelle x where x.ProjektName = y.ProjektName and x.StartDatum > y.StartDatum)
    then ' '
    else 'X'
  end as IsLast
from Tabelle y
Achtung! Mehrere Einträge mit gleichem (letzten) Enddatum bekommen alle ein 'X'!
Das dürfte hier nicht der Fall sein. Allerdings vermisse ich eh eine Identitätspalte.

Definiere einen AutoInc als PK und führe die Selektion (Icks oder nicht icks) lieber über den PK durch.
Dann ist das allgemeingültig.

SQL-Code:
Select *,
  case when exists (select * from Tabelle x where x.ProjektName = y.ProjektName and x.ID > y.ID)
    then ' '
    else 'X'
  end as IsLast
from Tabelle y
Somit hat jedes Projekt garantiert genau einen letzten Datensatz.

Piro 30. Apr 2012 13:16

AW: SQL Select Statement, letzten Datensatz markieren
 
@Furtbichler: Danke dir. Genau das war die Lösung.

An allen anderen auch ein Danke. Es ist immer wieder erstaunlich wie gut die Mitglieder des Forums sind.

In anderen Foren warten man ewig auf eine Antwort.

Schönen 1.Mai euch morgen.

Danke nochmal an alle.
Sven


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:30 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz