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
concept2015

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

Datum aus voriger Zeile zum berechnen

  Alt 17. Aug 2019, 19:11
Datenbank: Sqlite • Version: 3 • Zugriff über: Delphi
Hallo Spezialisten,
jetzt stehe ich vor dem nächsten Problem, zu dem ich keine Lösung finde.
Die Datenbank: Stammdaten
Die Tabelle : Zwischen

! gekürzt !
CREATE TABLE [zwischen](
[SatzNr] INTEGER PRIMARY KEY ASC AUTOINCREMENT,
[QEchtDat] DATE,
[WER] CHAR(30),
[Nummer] INTEGER);

Die Abfrage:

Select QechtDat,wer,Nummer
from Zwischen
where jahr="2019" and nummer = "139" order by QechtDat

bringt folgendes Ergebnis:
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
2019-03-08 Demag 139
2019-03-15 Demag 139

Jetzt muss ich für jede Zeile die vergangenen Tage zur vorigen Zeile berechnen:
Beispiel:
QEchtDat WER Nummer Tage
2019-01-10 Demag 139 0
2019-01-19 Demag 139 9
2019-01-25 Demag 139 6

Zeile 1 ist die erste Zeile und deshalb 0 Tage

Wie bekomme ich es hin,
(dass ich das Datum aus der Zeile zuvor mitnehme in die nächste Zeile)
(oder in der aktuellen Zeile auf das Datum der vorigen Zeile zugreife)
um daraus die Tage zu berechnen.
[SatzNr] ist in der Abfrage NICHT fortlaufend !

Wenn irgendwie möglich Abfrage mit --Erklärung
denn diese Nuss ist mir zu hart.

Danke im voraus für Eure Mühe.
  Mit Zitat antworten Zitat
Benutzerbild von timog
timog

Registriert seit: 26. Sep 2006
Ort: Landkreis Oldenburg (Oldb)
117 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#2

AW: Datum aus voriger Zeile zum berechnen

  Alt 17. Aug 2019, 20:05
In Sqlite kannst Du mit einer Unterabfrage arbeiten. Auf Stackoverflow gibt es da ein Beispiel.
Timo
Real Programmers are surprised when the odometers in their cars don't turn from 99999 to 9999A.
  Mit Zitat antworten Zitat
jobo

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

AW: Datum aus voriger Zeile zum berechnen

  Alt 17. Aug 2019, 22:23
Seit Ende 2018 (Version 3.25) gibt es Windows Functions in SQLite.
Damit nimmt man z.B. im Fall hier für Zugriff auf vorige oder folgende Datensätze lag() und lead() und benötigt keine Unterabfragen dazu. Der Zugriff auf andere Datensätze (vorige, nächste) ist damit sehr vergleichbar zu Tabellenkalkulationsprogrammen.
Da die Unterabfragen wegfallen und eine spezifische Implementierung dieser Funktionen vorgenommen wurde, ist es idR auch viel schneller.

Die Implementierung würde ich schon recht umfangreich nennen.
https://www.sqlite.org/windowfunctions.html



Hier ein Tutorial:
http://www.sqlitetutorial.net/sqlite...ns/sqlite-lag/
Gruß, Jo
  Mit Zitat antworten Zitat
concept2015

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

AW: Datum aus voriger Zeile zum berechnen

  Alt 18. Aug 2019, 08:15
Danke Timo und Jo !
Durch den Hinweis (Link) von Timo konnte ich mir die Lösung zusammenbauen.
Aus:

SELECT
day
,price
,price - (SELECT t2.price
FROM mytable t2
WHERE
t2.item = t1.item AND
t2.day < t1.day
ORDER BY t2.day DESC
LIMIT 1
) AS change
FROM mytable t1

wurde:
SELECT Qechtdat,wer,nummer,
JulianDay(Qechtdat) -
(SELECT
JulianDay(Qechtdat) As Integer
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"

mit dem Ergebnis:
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

Zeile 1 hat aber einen Fehler - hier ist kein Bezug auf ein Datum - also müsste er 0 sein.

Wie ich den ersten Eintrag auf 0 bekomme ist mir aber noch schleierhaft.

Hat jemand eine Idee ? (Lösung)
  Mit Zitat antworten Zitat
Schokohase
(Gast)

n/a Beiträge
 
#5

AW: Datum aus voriger Zeile zum berechnen

  Alt 18. Aug 2019, 08:41
Mal etwas verkürzt

Mit dieser Datenbasis
SQL-Code:
CREATE TABLE [zwischen](
[SatzNr] INTEGER PRIMARY KEY ASC AUTOINCREMENT,
[QEchtDat] DATE,
[WER] CHAR(30),
[Nummer] INTEGER);

INSERT INTO [zwischen] (QEchtDat,WER,Nummer) VALUES ('2019-01-10','Demag',139);
INSERT INTO [zwischen] (QEchtDat,WER,Nummer) VALUES ('2019-01-19','Demag',139);
INSERT INTO [zwischen] (QEchtDat,WER,Nummer) VALUES ('2019-01-25','Demag',139);
INSERT INTO [zwischen] (QEchtDat,WER,Nummer) VALUES ('2019-02-01','Demag',139);
INSERT INTO [zwischen] (QEchtDat,WER,Nummer) VALUES ('2019-02-08','Demag',139);
liefert diese Abfrage
SQL-Code:
select QEchtDat,
julianday(QEchtDat) - julianday(lag(QEchtDat,1,QEchtDat) over (order by QEchtDat)) Tage
from zwischen
diese Daten
Code:
        QEchtDat               Tage
----------------  ------------------
      10.01.2019                   0
      19.01.2019                   9
      25.01.2019                   6
      01.02.2019                   7
      08.02.2019                   7
  Mit Zitat antworten Zitat
concept2015

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

AW: Datum aus voriger Zeile zum berechnen

  Alt 18. Aug 2019, 09:25
WOW !!!

Danke Schokohase !!!

Volltreffer - bin sprachlos -
  Mit Zitat antworten Zitat
Antwort Antwort


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 11:08 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