Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Anfängerfrage: Datesätze mit dem spätmöglichsten Datum finden??? (https://www.delphipraxis.net/155045-anfaengerfrage-datesaetze-mit-dem-spaetmoeglichsten-datum-finden.html)

romber 6. Okt 2010 10:12

Datenbank: MS SQL Server • Version: 2008 • Zugriff über: ADO

Anfängerfrage: Datesätze mit dem spätmöglichsten Datum finden???
 
Hallo!

Ich hatte mal eine Tabelle mit über 10.000 Datensätze. Im Laufe der Zeit wurden fast allen Datensätzen Änderungen hinzugefügt. Bei jeder Änderung wurde ein neuer Datensatz mit den aktuellen Daten und dem selben ID hinzugefügt, damit man die Änderungen später nachverfolgen kann. Wie muss ich mein SELECT erweitern, um jeweils die aktuellste Version von jedem Datensatz zu erhalten?

youuu 6. Okt 2010 10:16

AW: Anfängerfrage: Datesätze mit dem spätmöglichsten Datum finden???
 
Ist es notwendig immer einen neuen Datensatz bei einer Änderung zu speichern?
Wieso kein Timestamp, bei einem Update?

DeddyH 6. Okt 2010 10:18

AW: Anfängerfrage: Datesätze mit dem spätmöglichsten Datum finden???
 
SQL-Code:
SELECT
  ID, Feld1, Feld2, Datum
FROM
  Tabelle A
WHERE
  Datum = (
    SELECT MAX(Datum)
    FROM Tabelle
    WHERE ID = A.ID)
Ungetestet. Ansonsten mal im Forum suchen, diese Frage hatten wir schon öfter.

Alien426 6. Okt 2010 12:01

AW: Anfängerfrage: Datesätze mit dem spätmöglichsten Datum finden???
 
Code:
SELECT TOP 1 ID, Feld1, Feld2, Datum FROM Tabelle ORDER BY Datum DESC
"TOP" entspricht dem "LIMIT" in anderen SQL-Dialekten:
Code:
SELECT ID, Feld1, Feld2, Datum FROM Tabelle ORDER BY Datum DESC LIMIT 1

DeddyH 6. Okt 2010 12:05

AW: Anfängerfrage: Datesätze mit dem spätmöglichsten Datum finden???
 
Dabei kommt aber nur 1 Datensatz heraus.

mkinzler 6. Okt 2010 12:10

AW: Anfängerfrage: Datesätze mit dem spätmöglichsten Datum finden???
 
[DP]"TOP" entspricht dem "LIMIT" in anderen SQL-Dialekten[/DP]
jein, Top bildet/deckt nur einen Teilaspekt von Limit, Rows und Co. ab

Gollum 6. Okt 2010 12:13

AW: Anfängerfrage: Datesätze mit dem spätmöglichsten Datum finden???
 
Hallo,

so sollte es gehen:

SQL-Code:
SELECT
  ID, Feld1, Feld2, MAX(Datum)
FROM
  Tabelle
GROUP BY
  ID, Feld1, Feld2

DeddyH 6. Okt 2010 12:16

AW: Anfängerfrage: Datesätze mit dem spätmöglichsten Datum finden???
 
Dabei können aber wieder mehrere Datensätze je ID gelistet werden.

romber 7. Okt 2010 08:25

AW: Anfängerfrage: Datesätze mit dem spätmöglichsten Datum finden???
 
Zitat:

Zitat von DeddyH (Beitrag 1054075)
SQL-Code:
SELECT
  ID, Feld1, Feld2, Datum
FROM
  Tabelle A
WHERE
  Datum = (
    SELECT MAX(Datum)
    FROM Tabelle
    WHERE ID = A.ID)

Und trotzdem erhalte ich mehrere Datensätze zu jedem ID.

romber 7. Okt 2010 08:53

AW: Anfängerfrage: Datesätze mit dem spätmöglichsten Datum finden???
 
Kann das sein, dass bei einem komplexeren WHERE und dem Code von DeddyH am Ende trotzdem mehere Datensätze zu einem ID geliefert werden?

joachimd 7. Okt 2010 08:58

AW: Anfängerfrage: Datesätze mit dem spätmöglichsten Datum finden???
 
Zitat:

Zitat von romber (Beitrag 1054223)
Kann das sein, dass bei einem komplexeren WHERE und dem Code von DeddyH am Ende trotzdem mehere Datensätze zu einem ID geliefert werden?

klar, wenn zwei Datensätze dasselbe Datum haben...

Bummi 7. Okt 2010 09:03

AW: Anfängerfrage: Datesätze mit dem spätmöglichsten Datum finden???
 
Wrap es im zwifelsfalle
SQL-Code:
Select * from
(
SELECT
  ID, Feld1, Feld2, Datum
FROM
  Tabelle A
WHERE
  Datum = (
    SELECT MAX(Datum)
    FROM Tabelle
    WHERE ID = A.ID)
)
where was auch immer

romber 7. Okt 2010 09:13

AW: Anfängerfrage: Datesätze mit dem spätmöglichsten Datum finden???
 
Zitat:

Zitat von Bummi (Beitrag 1054227)
Delphi-Quellcode:
Select * from
(
SELECT
  ID, Feld1, Feld2, Datum
FROM
  Tabelle A
WHERE
  Datum = (
    SELECT MAX(Datum)
    FROM Tabelle
    WHERE ID = A.ID)
)
where was auch immer

Falsche Syntax in der Nähe des 'WHERE'-Schlüsselworts. Geht das überhaupt, SELECT als Tabellenname?

Bummi 7. Okt 2010 09:16

AW: Anfängerfrage: Datesätze mit dem spätmöglichsten Datum finden???
 
sorry, fehlte was
umindest SQL-Server funtioniert so

Ansonaten eine Sicht für den inneren teil bauen
SQL-Code:
Select * from
(
SELECT
  ID, Feld1, Feld2, Datum
FROM
  TabelleA a
WHERE
  Datum = (
    SELECT MAX(Datum)
    FROM Tabellea
    WHERE ID = A.ID)
) a where ID=1

romber 7. Okt 2010 09:23

AW: Anfängerfrage: Datesätze mit dem spätmöglichsten Datum finden???
 
Verstehe ich nicht ganz. Und was sind diese A a?

mkinzler 7. Okt 2010 09:30

AW: Anfängerfrage: Datesätze mit dem spätmöglichsten Datum finden???
 
Zitat:

Verstehe ich nicht ganz.
Ist eine Derrived Tbale, also eine Abfrgae, die wie eine Tabelle verwendet wird
Zitat:

Und was sind diese A a?
Aliase

romber 7. Okt 2010 10:32

AW: Anfängerfrage: Datesätze mit dem spätmöglichsten Datum finden???
 
Danke!
Aber in diesem Fall werden gleich zwei SELECT-Abfragen ausgeführt, was deutlich langsamer ist. Gibt es eine bessere Variante?

mkinzler 7. Okt 2010 11:24

AW: Anfängerfrage: Datesätze mit dem spätmöglichsten Datum finden???
 
Pack es in eine SP

Btw.: Sei doch froh ein Lösung zu haben


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:18 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