Delphi-PRAXiS
Seite 5 von 7   « Erste     345 67      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Datum aus voriger Zeile zum berechnen (https://www.delphipraxis.net/201703-datum-aus-voriger-zeile-zum-berechnen.html)

p80286 24. Aug 2019 11:40

AW: Datum aus voriger Zeile zum berechnen
 
(langfristig hilft das ungemein!)

Da ich nicht weiß, bzw. nachvollziehen kann ob der Subselect funktioniert, solltest Du sicherstellen daß
SQL-Code:
...
JulianDay(Qechtdat) -
(SELECT JulianDay(Qechtdat) As Integer
...
solche mißverständlichen Formulierungen nicht auftauchen.
Und dann
SQL-Code:
...
JulianDay(Qechtdat) -coalesce(
(SELECT JulianDay(Qechtdat) As PrevDate
...
,0)
From ......
und dann schauen wir mal weiter.

Gruß
K-H

concept2015 24. Aug 2019 16:50

AW: Datum aus voriger Zeile zum berechnen
 
Die ganze Abfrage mit Subselect und Ergebnis steht in #38
Subselect klappt.
Nur die erste Zeile ist logischerweise falsch, da kein Datum davor existiert.

In meinem Beipiel steht in der ersten Zeile eine 20 ???
wo nimmt er die her ?

Die erste Zeile muss zwingend eine 0 sein

Die Abfrage:
 
SELECT Qechtdat,wer,nummer
FROM Zwischen
where Jahr = "2019"
and nummer = "139"
order by Qechtdat

bringt die Rohdaten:
 
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
2019-02-27 Demag 139
Ich brauche:
2019-01-10 //erster Besuch (keine vergangenen Tage)
//Tage = 0
//weil nicht mit Datum vorher berechenbar.

2019-01-19 //zweiter Besuch wieviel Tage sind vergangen
// seit erstem Besuch = 9
2019-01-25 //dritter Besuch wieviel Tage sind vergangen
// seit zweitem Besuch = 6
...

Ich muss praktisch den ersten Durchlauf ohne Berechnung
machen - alle weiteren mit Berechnung.

-coalesce((SELECT JulianDay(Qechtdat) As PrevDate
...
,0)
bringt einen Syntax-Fehler bei as

Wenn ich z.B. eine Zählvariable einbauen könnte, würde ich Sql erst ab dem zweiten Satz berechnen lassen.

p80286 24. Aug 2019 21:22

AW: Datum aus voriger Zeile zum berechnen
 
Oh entschuldige,da hab ich mich vertan

SQL-Code:
-coalesce(SELECT JulianDay(Qechtdat)...
,0) As PrevDate
Gruß
K-H

P.S.
Wenn der Subselect funktioniert sollte er null für den ersten Datensatz liefern das wird dann durch coalesce(subselect,0) zu 0, und das war doch was du wolltest?

concept2015 25. Aug 2019 07:47

AW: Datum aus voriger Zeile zum berechnen
 
Hallo :-D,
egal, wie ich den Befehl coalesce einbaue, Syntax Fehler.

Hier nochmal der Code, der bis auf die erste Zeile klappt
Code:
SELECT Qechtdat,wer,nummer,
JulianDay(Qechtdat) -
(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) AS Tage FROM Zwischen t1
where Jahr = "2019"
and nummer = "139"
Ich hab noch keine verständliche deutsche Erklärung für den Befehl "coalesce" gefunden, darum fische ich mit Deinem Tip im trüben.
Aber trotzdem vielen Dank für Deine Geduld.

HolgerX 25. Aug 2019 09:41

AW: Datum aus voriger Zeile zum berechnen
 
Hmm..

Zitat:

Zitat von concept2015 (Beitrag 1443076)
Ich hab noch keine verständliche deutsche Erklärung für den Befehl "coalesce" gefunden, darum fische ich mit Deinem Tip im trüben.
Aber trotzdem vielen Dank für Deine Geduld.

Google mit 'coalesce' gibt direkt als erstes:
https://docs.microsoft.com/de-de/sql...ql-server-2017

Die Beschreibung ist gleich mit der von MySQL (2. Link in EN), Oracle und SQLite:
https://www.w3schools.com/sql/func_mysql_coalesce.asp
https://docs.oracle.com/cd/B28359_01...htm#SQLRF00617
http://www.sqlitetutorial.net/sqlite...lite-coalesce/

Somit sollte diese Funktion in allen DB-Systemen vorhanden sein...

und somit sollte
-coalesce((SELECT JulianDay(Qechtdat) As PrevDate , 0)

entweder das letzte Datum, wenn vorhanden und somit nicht NULL, zurück liefern, ansonsten, wenn kein Datum vom SubSelect kommt (somit NULL) die '0'.

concept2015 25. Aug 2019 13:23

AW: Datum aus voriger Zeile zum berechnen
 
Der Code:
Code:
JulianDay(Qechtdat) - 
coalesce((SELECT JulianDay(Qechtdat) PrevDate , 0)
FROM Zwischen t2
Liefert im SQLiteExpertPro64 und in Delphi den Fehler:
near "Form":syntax error

Auch in einer Zeile geschrieben :(

p80286 25. Aug 2019 17:53

AW: Datum aus voriger Zeile zum berechnen
 
Zähl mal die Klammern!

Gruß
K-H

concept2015 25. Aug 2019 18:00

AW: Datum aus voriger Zeile zum berechnen
 
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

Die gleiche Abfrage ohne coalesce
Code:
SELECT Qechtdat,wer,nummer,
JulianDay(Qechtdat) - 
(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) AS Tage FROM Zwischen t1
where Jahr = "2019"
and nummer = "139"
Bis auf Zeile 1 läuft es.
Wo habe ich den Fehler ?

p80286 25. Aug 2019 18:10

AW: Datum aus voriger Zeile zum berechnen
 
SQL-Code:
SELECT Qechtdat,wer,nummer,
  JulianDay(Qechtdat) - 
  coalesce(SELECT JulianDay(Qechtdat)
         FROM Zwischen t2
         WHERE t2.nummer = t1.nummer
           AND JulianDay (t2.Qechtdat) < JulianDay(t1.Qechtdat)
         ORDER BY JulianDay(t2.Qechtdat) DESC LIMIT 1),0) AS Tage
FROM Zwischen t1
  where Jahr = "2019"
  and nummer = "139"
Gruß
K-H

concept2015 25. Aug 2019 18:32

AW: Datum aus voriger Zeile zum berechnen
 
1 zu 1 kopiert
:(
near "Select": syntax error
:pale:


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:37 Uhr.
Seite 5 von 7   « Erste     345 67      

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