Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi select statement (https://www.delphipraxis.net/144419-select-statement.html)

jangbu 7. Dez 2009 15:42

Datenbank: SQL-Server • Version: 2000 • Zugriff über: ADO

select statement
 
Hallo,

komme da mit einem select statement nicht klar. Hab eine Tabelle mit Spalten Charge,Typ,Probe,Zeit. Es gibt mehrere unterschiedliche Proben zu jeder Charge.
Was ist benötige, sind die jeweils letzten Einträge zu jeder Probe (fett markiert).

Charge Typ Probe Zeit
4712 M A 01:00
4712 M K 02:00
4712 M O 03:00
4712 M K 04:00
4712 M A 02:30

Ich müsste also 2 selects nacheinander auf die gleiche Tabelle absetzen. Etwa

1. select distinct(Probe) where Type = 'M' => um alle exisitierenden Proben zu ermitteln, also A,K,O
2. select LAST 1 from >= ERGEBNIS von 1. <= => um die jeweils letzten Sätze je Probe, also 03:00,04:00,02:30 zu ermitteln.

Bekomme jedoch die Abfrage nicht hin. Ich bräuchte äquivalent zu top 1. Jemand ne Idee?

mkinzler 7. Dez 2009 15:46

Re: select statement
 
http://blogs.msdn.com/sqlserver/arch...ql-server.aspx

ToFaceTeKilla 7. Dez 2009 15:49

Re: select statement
 
Hm du könntest auch in die andere richtung ordnen (absteigend?) und dann TOP machen...

jangbu 7. Dez 2009 15:58

Re: select statement
 
mein statemant sieht so aus:

select top 1 * from TABELLE where
(PROBE =
(select distinct(PROBE) from tabelle
where TYP = 'M' and CHARGE = 4712))


Bekomme dabei folgende Fehlermeldung zurück:

Die Unterabfrage gab mehr als einen Wert zurück. Das ist ungültig, wenn die Unterabfrage auf =, !=, <, <= , >, >= folgt oder als Ausdruck verwendet wird.

Wie mache ich der ersten Abfrage klar, das Unterabfrage mehrere Datensätze zurückgibt???

Mit der Umkehrung der Sortierung muss ich noch sehen.

mkinzler 7. Dez 2009 16:00

Re: select statement
 
SQL-Code:
select
    top 1 * 
from
    TABELLE
where
    PROBE in
        (select
             distinct(PROBE)
         from
             tabelle
         where
             TYP = 'M' and CHARGE = 4712);

nahpets 7. Dez 2009 16:11

Re: select statement
 
Hallo,

liefert Dir das da
SQL-Code:
select Charge, Typ, Probe, Max(Zeit) As Zeit
from tabelle
where TYP = 'M' and CHARGE = 4712)
group by Charge, Typ, Probe;
das gewünscht Ergebnis?

jangbu 7. Dez 2009 16:22

Re: select statement
 
Danke für die schnelle Hilfe!

mkinzler: ich bekomme leider wieder alle Datensätze zurück, nicht nur die jeweils letzten einer Probe.

nahpets: das passt, ich bekomme von allen 'Probenarten' den jeweils letzen Eintrag.

Danke

jangbu 7. Dez 2009 17:10

Re: select statement
 
nahpets:

noch eine Frage (Problem mit Aggregatfkt+Group) zu Deinem script von vorhin:

select Charge, Typ, Probe, Max(Zeit) As Zeit
from tabelle
where TYP = 'M' and CHARGE = 4712)
group by Charge, Typ, Probe

Ich brauche noch die jeweilige "ZeilenNummer" (eigenes Feld mit vorlaufender Nummer). Wenn ich dieses jetzt im select statement einbaue, also
=> select Zeilennummer,Charge, Typ, Probe, Max(Zeit) As Zeit

dann bekomme ich den Fehler: "Die Zeilennummer-Spalte ist in der Auswahlliste ungültig, da sie nicht in einer Aggregatfunktion und nicht in der GROUP BY-Klausel enthalten ist." Die Zeilennummer-Spalte in die Group Anweisung einfügen, ist aber Unsinn, weil sie dazu führt, das wieder alle und nicht nur die jeweils letzten Einträge angezeigt werden. Gibt es keine Möglichkeit ein Feld anzuzeigen, auch wenn es in keiner Group Anweisung auftaucht?

mkinzler 7. Dez 2009 17:51

Re: select statement
 
Wie soll dass den gehen, da du mehrere Zeilen zu einer zusammenfasst kannst du keine Feld nehmen , welches kein Aggegat ist oder in der Gruppierungs-Bedingung steht


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