AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

select statement

Ein Thema von jangbu · begonnen am 7. Dez 2009 · letzter Beitrag vom 7. Dez 2009
Antwort Antwort
jangbu

Registriert seit: 6. Apr 2006
171 Beiträge
 
Delphi 10.3 Rio
 
#1

select statement

  Alt 7. Dez 2009, 16:42
Datenbank: SQL-Server • Version: 2000 • Zugriff über: ADO
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?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: select statement

  Alt 7. Dez 2009, 16:46
http://blogs.msdn.com/sqlserver/arch...ql-server.aspx
Markus Kinzler
  Mit Zitat antworten Zitat
ToFaceTeKilla

Registriert seit: 17. Mai 2006
Ort: Leipzig
283 Beiträge
 
Delphi XE2 Professional
 
#3

Re: select statement

  Alt 7. Dez 2009, 16:49
Hm du könntest auch in die andere richtung ordnen (absteigend?) und dann TOP machen...
Billy Gerwitz
"Bei der Softwareentwicklung suchen wir nicht den richtigen Weg, sondern den am wenigsten falschen." - frei nach V. Hillmann
  Mit Zitat antworten Zitat
jangbu

Registriert seit: 6. Apr 2006
171 Beiträge
 
Delphi 10.3 Rio
 
#4

Re: select statement

  Alt 7. Dez 2009, 16:58
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.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: select statement

  Alt 7. Dez 2009, 17:00
SQL-Code:
select
    top 1 *
from
    TABELLE
where
    PROBE in
        (select
             distinct(PROBE)
         from
             tabelle
         where
             TYP = 'Mand CHARGE = 4712);
Markus Kinzler
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#6

Re: select statement

  Alt 7. Dez 2009, 17:11
Hallo,

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

Registriert seit: 6. Apr 2006
171 Beiträge
 
Delphi 10.3 Rio
 
#7

Re: select statement

  Alt 7. Dez 2009, 17:22
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
  Mit Zitat antworten Zitat
jangbu

Registriert seit: 6. Apr 2006
171 Beiträge
 
Delphi 10.3 Rio
 
#8

Re: select statement

  Alt 7. Dez 2009, 18:10
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?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: select statement

  Alt 7. Dez 2009, 18:51
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
Markus Kinzler
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:05 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