AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Datum aus voriger Zeile zum berechnen
Thema durchsuchen
Ansicht
Themen-Optionen

Datum aus voriger Zeile zum berechnen

Ein Thema von concept2015 · begonnen am 17. Aug 2019 · letzter Beitrag vom 26. Aug 2019
Antwort Antwort
Seite 6 von 7   « Erste     456 7      
HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
970 Beiträge
 
Delphi 6 Professional
 
#51

AW: Datum aus voriger Zeile zum berechnen

  Alt 25. Aug 2019, 20:08
Die Abfrage mit coalesce:
Code:
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"
Es kommt - der beschriebene Fehler
coalesce((SELECT JulianDay(Qechtdat) as Tage ,0)

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....
(Ja ich Verwende Delphi 6 Pro und will NICHT wechseln!)
  Mit Zitat antworten Zitat
concept2015

Registriert seit: 22. Dez 2015
Ort: Nähe Dortmund
44 Beiträge
 
Delphi 7 Professional
 
#52

AW: Datum aus voriger Zeile zum berechnen

  Alt 26. Aug 2019, 07:04
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.
  Mit Zitat antworten Zitat
Schokohase
(Gast)

n/a Beiträge
 
#53

AW: Datum aus voriger Zeile zum berechnen

  Alt 26. Aug 2019, 07:38
Dann schauen wir uns die Abfrage in der Gänze an und arbeiten uns mal zum Kern weiter vor:
SQL-Code:
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"
Jetzt nehmen wir (ausgehend von den Klammern) alles das, was zum coalesce(...) gehört:
SQL-Code:
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)
und nun betrachten wir mal das Innere von coalesce(...)
SQL-Code:
(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
Dieses ergibt einfach keinen Sinn und wird darum auch zurecht als fehlerhaft zurückgewiesen.

Ein einfaches Klammern zählen hilft hier nicht.
  Mit Zitat antworten Zitat
Benutzerbild von Billa
Billa

Registriert seit: 11. Aug 2003
237 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#54

AW: Datum aus voriger Zeile zum berechnen

  Alt 26. Aug 2019, 07:39
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.
Gruß Billa

Nur weil ich paranoid bin, heißt das nicht, daß die da draussen nicht hinter mir her sind....
  Mit Zitat antworten Zitat
Schokohase
(Gast)

n/a Beiträge
 
#55

AW: Datum aus voriger Zeile zum berechnen

  Alt 26. Aug 2019, 07:55
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:
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";
und hier auch noch der Beweis
  Mit Zitat antworten Zitat
concept2015

Registriert seit: 22. Dez 2015
Ort: Nähe Dortmund
44 Beiträge
 
Delphi 7 Professional
 
#56

AW: Datum aus voriger Zeile zum berechnen

  Alt 26. Aug 2019, 08:09
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
....
  Mit Zitat antworten Zitat
Schokohase
(Gast)

n/a Beiträge
 
#57

AW: Datum aus voriger Zeile zum berechnen

  Alt 26. Aug 2019, 08:12
Klickst du auf der Beweis

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

Geändert von Schokohase (26. Aug 2019 um 08:15 Uhr)
  Mit Zitat antworten Zitat
concept2015

Registriert seit: 22. Dez 2015
Ort: Nähe Dortmund
44 Beiträge
 
Delphi 7 Professional
 
#58

AW: Datum aus voriger Zeile zum berechnen

  Alt 26. Aug 2019, 08:28


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



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.

Geändert von concept2015 (26. Aug 2019 um 08:36 Uhr)
  Mit Zitat antworten Zitat
Schokohase
(Gast)

n/a Beiträge
 
#59

AW: Datum aus voriger Zeile zum berechnen

  Alt 26. Aug 2019, 08:40
Screenshot sqlfiddle
sql_fiddle.jpg
Screenshot SQliteExpert
2019-08-26-08_38_43-window.png
Ich kann dir anscheinend nicht helfen (ich frage mich allerdings auch wer es könnte)
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#60

AW: Datum aus voriger Zeile zum berechnen

  Alt 26. Aug 2019, 09:09
Und auf DER BEWEIS kommt kein Ergebnis ?
You need to build the schema before you can run a query.
sqlfiddle hinkt manchmal oder will einen anderen Browser..
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.
Gruß, Jo
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 6 von 7   « Erste     456 7      


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 22:00 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