![]() |
AW: Datum aus voriger Zeile zum berechnen
Zitat:
Wie p80286 schon schrieb : Zähl die Klammern! -> 3x Öffnen und nur 2x Schließen.... coalesce((SELECT JulianDay(Qechtdat) as Tage) ,0) So müsste diese Zeile lauten.... ;) |
AW: Datum aus voriger Zeile zum berechnen
In dem kleinen Ausschnitt betrachtet:
coalesce((SELECT JulianDay(Qechtdat) as Tage ,0) stimmt es, was ihr sagt - aber der Blick auf die Ganze Abfrage zeigt, das die Klammern richtig sind. Wenn ich coalesce( und ,0) entferne, läuft die Abfrage, bis auf den Fehler in Zeile 1 der Ausgabe. |
AW: Datum aus voriger Zeile zum berechnen
Dann schauen wir uns die Abfrage in der Gänze an und arbeiten uns mal zum Kern weiter vor:
SQL-Code:
Jetzt nehmen wir (ausgehend von den Klammern) alles das, was zum
SELECT Qechtdat,wer,nummer,
JulianDay(Qechtdat) - coalesce((SELECT JulianDay(Qechtdat) as Tage ,0) FROM Zwischen t2 WHERE t2.nummer = t1.nummer AND JulianDay (t2.Qechtdat) < JulianDay(t1.Qechtdat) ORDER BY JulianDay(t2.Qechtdat) DESC LIMIT 1) AS Tage FROM Zwischen t1 where Jahr = "2019" and nummer = "139"
SQL-Code:
gehört:
coalesce(...)
SQL-Code:
und nun betrachten wir mal das Innere von
coalesce((SELECT JulianDay(Qechtdat) as Tage ,0)
FROM Zwischen t2 WHERE t2.nummer = t1.nummer AND JulianDay (t2.Qechtdat) < JulianDay(t1.Qechtdat) ORDER BY JulianDay(t2.Qechtdat) DESC LIMIT 1)
SQL-Code:
coalesce(...)
SQL-Code:
Dieses ergibt einfach keinen Sinn und wird darum auch zurecht als fehlerhaft zurückgewiesen.
(SELECT JulianDay(Qechtdat) as Tage ,0)
FROM Zwischen t2 WHERE t2.nummer = t1.nummer AND JulianDay (t2.Qechtdat) < JulianDay(t1.Qechtdat) ORDER BY JulianDay(t2.Qechtdat) DESC LIMIT 1 Ein einfaches Klammern zählen hilft hier nicht. |
AW: Datum aus voriger Zeile zum berechnen
Hallo,
ich bin hier gerade reingestolpert habe mir das SELECT-Statement nur sehr oberflächlich angeschaut. Könnte etwas mehr Klarheit erreicht werden, wenn allen selektierten Feldern der Qualifier der jeweiligen Abfrage vorangestellt würde? Ich sehe z.B. nicht auf einen Blick, welches "QechtDat" in Zeile 4 gewünscht ist: das aus T1 oder das aus T2? Also "T1.QechtDat" oder "T2.QechtDat"... In solchen Fällen hilft es mir, wenn ich "von aussen nach innen" arbeite. In diesem Fall also statt der inneren Abfrage mit coalesce erstmal eine Konstante eintragen und schauen, ob die Ergebnisse den Voraussetzungen entsprechen. Erst wenn das ok ist, erweitere ich die Abfrage. ähhh.... Schokohase war schneller. |
AW: Datum aus voriger Zeile zum berechnen
So und zur Auflösung gibt es jetzt auch ein wirklich funktionierendes Statement, was tatsächlich auch die Werte liefert, die gewünscht sind:
SQL-Code:
und hier auch noch
SELECT
Qechtdat, wer, nummer, JulianDay(Qechtdat) - COALESCE( ( SELECT JulianDay(Qechtdat) As Tage FROM Zwischen t2 WHERE t2.nummer = t1.nummer AND JulianDay (t2.Qechtdat) < JulianDay(t1.Qechtdat) ORDER BY JulianDay(t2.Qechtdat) DESC LIMIT 1 ), JulianDay(Qechtdat) ) AS Tage FROM Zwischen t1 WHERE Jahr = "2019" AND nummer = "139"; ![]() |
AW: Datum aus voriger Zeile zum berechnen
Danke für die Mühe - aber der Fehler im Ergebnis (Zeile 1) ist
noch da ! In der ersten Zeile kann kein Datum vorher stehen - muss also null sein - Die Grunddaten sind: QEchtDat WER Nummer 2019-01-10 Demag 139 2019-01-19 Demag 139 2019-01-25 Demag 139 2019-02-01 Demag 139 2019-02-08 Demag 139 2019-02-13 Demag 139 Es handelt sich hier um Kundenbesuche mit der Frage, wieviele Tage zwischen den Besuchen liegen. Logischerweise kann in Zeile 1 keine Berechnung erfolgen, da es sich um den ersten Besuch handelt. Das gesuchte Ergebnis müsste so aossehen: QEchtDat WER Nummer Tage 2019-01-10 Demag 139 0 2019-01-19 Demag 139 9 2019-01-25 Demag 139 6 .... |
AW: Datum aus voriger Zeile zum berechnen
Klickst du auf
![]() Ich sehe da als Ergebnis
Code:
QEchtDat WER Nummer Tage
2019-01-10 Demag 139 0 2019-01-19 Demag 139 9 2019-01-25 Demag 139 6 2019-02-01 Demag 139 7 2019-02-08 Demag 139 7 |
AW: Datum aus voriger Zeile zum berechnen
:-D:-D:-D
Bei mir in SqLiteexpert: QEchtDat WER Nummer Tage 2019-01-10 Demag 139 20 2019-01-19 Demag 139 9 2019-01-25 Demag 139 6 2019-02-01 Demag 139 7 2019-02-08 Demag 139 7 2019-02-13 Demag 139 5 :oops: So weit waren wir doch schon ohne COALESCE( Und auf DER BEWEIS kommt kein Ergebnis ? You need to build the schema before you can run a query. |
AW: Datum aus voriger Zeile zum berechnen
Liste der Anhänge anzeigen (Anzahl: 2)
Screenshot sqlfiddle
Anhang 51583 Screenshot SQliteExpert Anhang 51584 Ich kann dir anscheinend nicht helfen (ich frage mich allerdings auch wer es könnte) |
AW: Datum aus voriger Zeile zum berechnen
Zitat:
einfach später noch mal probieren "Build Your Schema" möchte nur, dass Du den Knopf drückst, um Tabellen anzulegen und Daten einzuspielen, also das Script auf der linken Seite (manuell) starten. Auf der rechten kannst Du die Abfrage formulieren, ändern, starten. Ist aber alles auch Wurscht, wenn es nicht klappt. Das ist ja nur ein Hilfsmittel, um online 100% das Gleiche zu machen und über das Gleiche zu reden. Script kopieren und lokal ausführen muss zum gleichen Ergebnis führen, das ist der Punkt. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:32 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz