SQL Query - Borland Interbase DB
Morgen,
ich versuche mich an einer SQL Query und bekomme es nicht hin.
Folgendes Statement funktionert soweit:
Jetzt werde mir alle Datensätze von allen Jahren angezeigt, ich will aber nur die von 2011.
Wie kann ich nun eine WHERE Afrage auf die erste Spalte einbinden?
WHERE 1 <= ...
WHERE min(AFADAT) <= ...
WHERE MINDAT <= ..
Leider alles ohne Erfolg.
Jmd eine Idee?
Danke
ich versuche mich an einer SQL Query und bekomme es nicht hin.
Folgendes Statement funktionert soweit:
select min(AFADAT) AS MINDAT, AFNAME, from WDAUFTRAG
group by AFNAME
order by 1 desc
Jetzt werde mir alle Datensätze von allen Jahren angezeigt, ich will aber nur die von 2011.
Wie kann ich nun eine WHERE Afrage auf die erste Spalte einbinden?
WHERE 1 <= ...
WHERE min(AFADAT) <= ...
WHERE MINDAT <= ..
Leider alles ohne Erfolg.
Jmd eine Idee?
Danke
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 173974
Url: https://administrator.de/contentid/173974
Ausgedruckt am: 22.11.2024 um 10:11 Uhr
13 Kommentare
Neuester Kommentar
Moin Moin
Du willst mir nicht ernsthaft erzählen, das wenn du ein (möglicherweise) Fehlerhaftes SQL Statement absetzt du die Rückmeldung:
So auf die schnelle (ohne Tabellen, Datentypen und Interbase genauer zu kennen) würde ich sagen...
so solte es eigendlich funktionieren:
Du willst mir nicht ernsthaft erzählen, das wenn du ein (möglicherweise) Fehlerhaftes SQL Statement absetzt du die Rückmeldung:
Leider alles ohne Erfolg.
bekommst?So auf die schnelle (ohne Tabellen, Datentypen und Interbase genauer zu kennen) würde ich sagen...
so solte es eigendlich funktionieren:
select min(AFADAT) AS MINDAT, AFNAME from WDAUFTRAG
WHERE MINDAT <= 2011
group by AFNAME
order by 1 desc
Moin moin
Stimmt. Und ich hatte durchblicken lassen das ich eine fehlermeldung (z.B. syntaxfehler .. oder ähnliches) erwarten würde.
Nicht nur auf deinem Bildschim sondern auch in deinen Posts.
Probiers mal so:
erstmal ohne group.
Gruß L.
Stimmt. Und ich hatte durchblicken lassen das ich eine fehlermeldung (z.B. syntaxfehler .. oder ähnliches) erwarten würde.
Nicht nur auf deinem Bildschim sondern auch in deinen Posts.
Das ansprechen der ersten Spalte funtkioniert eben nicht!
Warum muss es denn unbedingt die erste spate sein?Probiers mal so:
select min(AFADAT) AS MINDAT, AFNAME from WDAUFTRAG
WHERE AFADAT <= 2011
order by 1 desc
Gruß L.
Moin
Die würde ich auch erstmal links liegen lassen.
bzw. mit min und Group:
Wie siehts damit aus?
Gruß L.
Die würde ich auch erstmal links liegen lassen.
>Warum muss es denn unbedingt die erste spate sein?
DA ja in der ersten Spalte das MIN(Datum) steht und ich das auf 2011 begrenzen möchte.
Und wenn du AFADAT auf 2011 begrenzt?DA ja in der ersten Spalte das MIN(Datum) steht und ich das auf 2011 begrenzen möchte.
select AFADAT, AFNAME from WDAUFTRAG
WHERE WDAUFTRAG.AFADAT <= '01.01.2011'
select min(AFADAT), AFNAME from WDAUFTRAG
WHERE WDAUFTRAG.AFADAT <= '01.01.2011'
group by AFNAME
Wie siehts damit aus?
Gruß L.
Moin
Wiso? Das Ergebnis spiegelt doch exackt das SQL Statement wieder?
Oder ist ein Datum > 1.1.2011 enthalten?
Zur Erinnerung:
Und immerhin kein
Ich habe leider keine Ahnung ob Interbase Funktionen wie YEAR() oder BETWEEN() kennt.
Daher versuchs einfach mal so:
Gruß L.
Wiso? Das Ergebnis spiegelt doch exackt das SQL Statement wieder?
Oder ist ein Datum > 1.1.2011 enthalten?
Zur Erinnerung:
Wie kann ich nun eine WHERE Afrage auf die erste Spalte einbinden?
WHERE 1 <= ...
WHERE min(AFADAT) <= ...
WHERE MINDAT <= ..
WHERE 1 <= ...
WHERE min(AFADAT) <= ...
WHERE MINDAT <= ..
Und immerhin kein
Column unknown
oderinvalid column reference
Ich habe leider keine Ahnung ob Interbase Funktionen wie YEAR() oder BETWEEN() kennt.
Daher versuchs einfach mal so:
select min(AFADAT), AFNAME from WDAUFTRAG
WHERE WDAUFTRAG.AFADAT >= '01.01.2011' AND WDAUFTRAG.AFADAT <= '31.12.2011'
group by AFNAME
order by 1 asc
Gruß L.
Moin Moin
1. Es ist nicht klug Fragen in gelösten Beiträgen zu formulieren.
2. Was dein 1. SQL Statement angeht (sehe keinen Sinn darin über das 2. zu reden)
rate ich mal, das hängt mit dem Datentyp WDAUFTRAG.AFADAT zusammen (den ich nicht kenne).
Wenn die Spalte WDAUFTRAG.AFADAT als String (varchar, char, oder was immer Interbase da noch so kennt) definiert ist, wird der Vergleich wohl Einträge wie '02.01.2000' zulassen.
Du köntest versuchen Text '01.01.2011' via Cast als Date zu konvertieren.
Etwa so:
Falls die Spalte WDAUFTRAG.AFADAT ebenfall kein Date ist kannst du es auch mal so versuchen:
Nebenbei: Du soltest dir dringend eine SQL Referenz von interbase besorgen.
Gruß L.
1. Es ist nicht klug Fragen in gelösten Beiträgen zu formulieren.
2. Was dein 1. SQL Statement angeht (sehe keinen Sinn darin über das 2. zu reden)
rate ich mal, das hängt mit dem Datentyp WDAUFTRAG.AFADAT zusammen (den ich nicht kenne).
Wenn die Spalte WDAUFTRAG.AFADAT als String (varchar, char, oder was immer Interbase da noch so kennt) definiert ist, wird der Vergleich wohl Einträge wie '02.01.2000' zulassen.
Du köntest versuchen Text '01.01.2011' via Cast als Date zu konvertieren.
Etwa so:
select min(AFADAT), AFNAME from WDAUFTRAG
WHERE WDAUFTRAG.AFADAT>= Cast( '01.01.2011' as date)
group by AFNAME
order by 1 asc
Falls die Spalte WDAUFTRAG.AFADAT ebenfall kein Date ist kannst du es auch mal so versuchen:
select min(AFADAT), AFNAME from WDAUFTRAG
WHERE WDAUFTRAG.AFADAT>= Cast( '01.01.2011' as date)
group by AFNAME
order by 1 asc
Nebenbei: Du soltest dir dringend eine SQL Referenz von interbase besorgen.
Gruß L.
Moin
Das min() greift doch nur das kleinere bei den Datensätzen heraus wo mehere Einträge AFADAT mit identischem AFNAME existieren.
Nach dem Where wohlgemerkt.
Wenn Du recht hättest müste
zwar immer das ein AFADAT im richtigen Jahr anzeigen, wärend
auch ältere Einträge enthält.
Gruß L.
1. Hätte ich ein neues Thema mit dem gleichen Problem aufgemacht, hättest bestimmt das gleiche gesagt ;)
Ja vielleicht.Der Datentyp von AFADAT ist TIMESTAMP.
Das Statement mit CAST erbringt das gleiche Ergebnis.
Du hast das Statement dann auch auf Cast as timestamp umgeschrieben?Das Statement mit CAST erbringt das gleiche Ergebnis.
Ich glaube über die WHERE Klausel im Bezug auf AFADAT und nicht auf MIN(AFADAT) wird das Ergebnis verfläscht.
Das würde allen SQL Dialekten die ich kenne (auch wenn IInterbase nicht dazugehört sind es dennoch einige) wiedersprechen.Das min() greift doch nur das kleinere bei den Datensätzen heraus wo mehere Einträge AFADAT mit identischem AFNAME existieren.
Nach dem Where wohlgemerkt.
Wenn Du recht hättest müste
select AFADAT, AFNAME from WDAUFTRAG
WHERE WDAUFTRAG.AFADAT>= Cast( '01.01.2011' as timestamp)
order by 1 asc
select min(AFADAT), AFNAME from WDAUFTRAG
WHERE WDAUFTRAG.AFADAT>= Cast( '01.01.2011' as timestamp)
group by AFNAME
order by 1 asc
Gruß L.