Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Hilfe für SQL-Statement

Begonnen von C4RL0, September 13, 2012, 11:19:52

⏪ vorheriges - nächstes ⏩

Beaker s.a.

Hallo Eberhard,
Ich bemühe mich ja.
gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

C4RL0

#16
Zitat von: ebs17 am September 15, 2012, 12:10:51
Meine Frage: Welchen Formatierer verwendest Du? (Das Spurenbild kenne ich noch nicht.)
Hintergrund der Frage: Die SQL-Ansicht des Abfrageeditors bietet leider nicht die Möglichkeit des Formatierens (hier wird eher deformatiert neben einigen weiteren Unzulänglichkeiten)....

I.d.R. verwende ich entweder den:
http://poorsql.com/
oder den:
http://www.sqlinform.com/free_online_sw.html

Welchen ich in den o.g. Beispielen verwendet habe, weiß ich nicht mehr. Leider versagen manche ihren Dienst, sobald ein Syntax Error eingebaut ist.

An dieser Stelle noch mal Danke an alle Beteiligten!
_____________________________
Gruß
Carlo

C4RL0

#17
Eine Änderung hab ich noch, und zwar in folgendem Teil:

SELECT  trkAuftragsnummer,
            MAX(trkZeit) AS MaxZeit
            FROM     tblTrack
            WHERE (trkZiel > 'SAP' OR trkZiel < 'SAP' )
            AND (trkZiel > 'JUN' OR trkZiel < 'JUN')
            AND trkZeit < DATE()-33
            GROUP BY trkAuftragsnummer;


Dieser Code liefert Datensätze, wo das Datum trkZeit älter als 33 Tage ist.
Ich möchte aber nur Datensätze, wo das letzte Datum trkZeit älter als 33 Tage ist
Wenn das letzte Datum dieses Auftrags trkZeit jünger / gleich 33 Tage ist möchte ich von der trkAuftragsnummer KEINEN Datensatz bekommen.

Folgendes funktioniert leider nicht:
SELECT  trkAuftragsnummer,
            MAX(trkZeit) AS MaxZeit
            FROM     tblTrack
            WHERE (trkZiel > 'SAP' OR trkZiel < 'SAP' )
            AND (trkZiel > 'JUN' OR trkZiel < 'JUN')
            AND MAX(trkZeit) < DATE()-33
            GROUP BY trkAuftragsnummer;


Wie löse ich das Problem?
_____________________________
Gruß
Carlo

oma

#18
Hallo,

probiere mal:

            SELECT  trkAuftragsnummer,
            MAX(trkZeit) AS MaxZeit
            FROM     tblTrack
            WHERE (trkZiel <> 'SAP' )         ' besser noch eine Zeile u. Not In ('SAP'; 'Jun')
            AND (trkZiel <> 'JUN' )
            GROUP BY trkAuftragsnummer;
            HAVING (((DMax("trkZeit","tblTrack","trkAuftragsnummer=" & [trkAuftragsnummer]))<Date()-33));



Gruß Oma

nichts ist fertig!

ebs17

#19
@oma: Zum Vorschlag sowie zum "besser noch" solltest Du eine Beschreibung der Risiken und Nebenwirkungen beilegen oder aber erklären, woher Du weißt, dass C4RL0 nur eine geringfügige Tabelle hat: Die mögliche Indexnutzung, die ich beiläufig eingeführt hatte und die C4RL0 übernommen wenn nicht gar verstanden hat, möchtest Du wieder killen und sogar als Vorteil verkaufen?

Vorschlag:
SELECT   trkAuftragsnummer,
        MAX(trkZeit) AS MaxZeit
FROM     tblTrack
WHERE    (
                 trkZiel > 'SAP'
        OR       trkZiel < 'SAP'
        )
AND
        (
                 trkZiel > 'JUN'
        OR       trkZiel < 'JUN'
        )
GROUP BY trkAuftragsnummer
HAVING   MAX(trkZeit) < DATE() - 33


Hinweis dazu: WHERE filtert vor der Gruppierung (auch im Abfrageablauf => Verkleinerung der Datenmenge vor der aufwändigeren Aktion Gruppieren/Aggregieren),  HAVING filtert Ergebnisse der Aggregierung. Vom Abfrageeditor erzeugte SQL-Strings in diesem Zusammenhang sind recht oft fehlerhaft.

Außerdem: Danke für die Links. Den ersten kannte ich noch nicht.

MfGA
ebs
Mit freundlichem Glück Auf!

Eberhard

C4RL0

Zitat von: ebs17 am September 17, 2012, 20:46:12...Hinweis dazu: WHERE filtert vor der Gruppierung (auch im Abfrageablauf => Verkleinerung der Datenmenge vor der aufwändigeren Aktion Gruppieren/Aggregieren),  HAVING filtert Ergebnisse der Aggregierung...

Das ist wohl mal wieder das klassische Beispiel für "Ich hab das mal gelesen aber bisher noch nie gebraucht". Dank dieses praktischen Beispiels ist es jäh wieder zum Vorschein gekommen.

Vielen Dank für die Erläuterungen und den Code, der hervorragend läuft!
_____________________________
Gruß
Carlo