blueeyephoenix
Goto Top

SQL: Setze festen Wert wenn

Hallo Community,

ich habe da nochmal eine Frage zur SQL Datenbank.
Ich möchte das mir ein festes Datum, quasi ein Stempel, gesetzt wird wenn ein Wert erreicht wird.

Dazu habe ich mir eine "case when Fromel" gebaut die mir die Datumsdifferenz errechnet.

Wenn da nun der Wert 14 erreicht wird soll er mir das Datum an dem der Wert 14 erreicht wurde festsetzten.
Das Datum soll sich danach aber nicht mehr ändern.

Hoffe es ist verständlich was ich vor habe (Hoffe mal, dass es überhaupt möglich ist).

Evtl. hat jemand eine Hilfestellung für mich ob oder wie man das Umsetzen könnte in sql.

Vielen Dank

Content-ID: 665582

Url: https://administrator.de/contentid/665582

Ausgedruckt am: 20.11.2024 um 02:11 Uhr

akretschmer
akretschmer 09.04.2021 um 10:39:42 Uhr
Goto Top
völlig unverständlich, was Du willst.
MrCount
MrCount 09.04.2021 aktualisiert um 11:16:55 Uhr
Goto Top
Servus,

so wie ich es verstanden habe....

Setze doch den Wert des Feldes auf das Datum, welches schon da ist und addiere 14 Tage.
Also quasi so:

Datum_Stempel = Datum1 + 14

... oder so ähnlich.
Spart auch die Berechnung der Differenz.

Ansonsten bitte mal deutlicher beschreiben.
BlueEyePhoenix
BlueEyePhoenix 09.04.2021 um 11:23:28 Uhr
Goto Top
Also ich habe eine Tabelle mit

Letzter verbrauch Heute Tage
01.04.2021 09.04.2021 9
24.03.2021 09.04.2021 14
22.03.2021 09.04.2021 16

und möchte diese um eine Spalte erweitern in der das Datum von dem tag gesetzt wird an dem die 14 erreicht wurde

Beispiel:
Letzter verbrauch Heute Tage 14 Erreicht
01.04.2021 09.04.2021 9 Null
24.03.2021 09.04.2021 14 09.04.2021
22.03.2021 09.04.2021 16 07.04.2021

Dazu wollte ich wissen wie ich unter die 14 Erreicht den festen Zeitstempel bekomme, da letzter Verbrauch sich auch mal ändern wird.
Sobald aber die 14 erreicht wurde soll er mir das Datum in ein neues Feld schreiben. Das heißt wenn letzter Verbrauch schonmal auf 14 war soll das Datum von dem Tag an dem die 14 erreicht wurde angezeigt werden. Das Datum muss sich dann erst wieder ändern wenn ein Verbrauch stattgefunden hat und die Tage dann wieder die 14 erreichen.

Hoffe das es so verständlicher ist
MrCount
MrCount 09.04.2021 um 11:29:26 Uhr
Goto Top
Ok, dann evtl. so:
wenn das Feld Tage = 14 ist, dann setze das Erreicht-Datum auf Letzter Verbrauch + 14
em-pie
Lösung em-pie 09.04.2021 aktualisiert um 17:52:01 Uhr
Goto Top
Moin,

welches DBMS kommt zum Einsatz?
Wenn MS SQL, dann sähe das so aus:

SELECT
 "letzter Verbrauch"  
 , "Heute" = CONVERT(date, CURRENT_TIMESTAMP)  
 , "Tage" = DATEDIFF(day, "letzter Verbrauch", CONVERT(date, CURRENT_TIMESTAMP))  
 , "Erreicht" = case  
    when DATEADD(date, 14, "letzter Verbrauch") < CURRENT_TIMESTAMP then NULL  
    else CONVERT(DATE, DATEADD(date, 14, "letzter Verbrauch"))  
    end
FROM
 myTable

Hilfe zu Dateadd() gibt es hier: https://docs.microsoft.com/en-us/sql/t-sql/functions/dateadd-transact-sq ...


Edit: Datentypen korrigiert

Gruß
em-pie
ukulele-7
ukulele-7 09.04.2021 um 13:30:00 Uhr
Goto Top
Also erstmal schreibt niemand in eine Tabelle eine Spalte mit Datum "Heute", das ist ziemlich abwegig. Wenn dann eventuell eine Spalte für das Datum, an dem der Wert ermittelt oder in die Datenbank geschrieben wurde, aber dann ist der Spaltenname "Heute" vermutlich die schlechteste Wahl.

Wann und wie werden diese Daten geschrieben? Gibt es einen Job der die Daten in die Tabelle schreibt? Läuft der täglich oder öfter? Kannst du den verändern?
Zitat von @BlueEyePhoenix:

Also ich habe eine Tabelle mit

Letzter verbrauch Heute Tage
01.04.2021 09.04.2021 9
24.03.2021 09.04.2021 14
22.03.2021 09.04.2021 16

und möchte diese um eine Spalte erweitern in der das Datum von dem tag gesetzt wird an dem die 14 erreicht wurde

Beispiel:
Letzter verbrauch Heute Tage 14 Erreicht
01.04.2021 09.04.2021 9 Null
24.03.2021 09.04.2021 14 09.04.2021
22.03.2021 09.04.2021 16 07.04.2021
Warum ist der Wert hier am 22.03. höher als am 24.03.? Oder besteht kein Zusammenhang zwischen den Datensätzen?
BlueEyePhoenix
BlueEyePhoenix 09.04.2021 um 13:43:36 Uhr
Goto Top
Bin das gerade so am versuchen aber wenn sich jetzt das Datum vom letzten verbrauch anpassen würde dann bleibt das alte Datum nicht stehen oder?
BlueEyePhoenix
BlueEyePhoenix 09.04.2021 um 13:48:06 Uhr
Goto Top
09.04.2021-22.03.2021 ergibt 16 Tage
09.04.2021-24.03.2021 ergibt 14 Tage

in meiner Tabelle steht aber heute da es mir das heutige Datum anzeigt.

Die Tabellen bestehen bereits. Ich versuche mir die Daten mit der Tabelle aufzubereiten. Laufen soll das dann einmal am Tag.
it-frosch
it-frosch 09.04.2021 um 15:22:51 Uhr
Goto Top
Hallo BlueEyePhonix,

wenn ich dich richtig verstehe, hast du irgend etwas, das nach dem "letzten Verbrauch" auf 14 hochgezählt werden soll.
Wenn "die 14" erreicht ist, möchtest du dieses Datum in einem anderen Feld sichern. Sobald wieder ein "Verbrauch" auftritt,
setzt sich der Zähler wieder zurück und zählt wieder bis 14 hoch. Du möchtest jedes Mal wenn die 14 erreicht ist das Datum in ein anderes Feld sichern. (Beispiel: der letzte Wasserrohrbuch war am: Datum)

Ich würde einen Trigger an den "Verbrauch" hängen, der dir deinen Zähler (der bis 14 zählen soll) und das Datum (wann 14 erreicht) zurücksetzt bzw. löscht.
Dann würde ich den Zähler auswerten und beim Erreichen von "14" das Datum in die entsprechende Tabelle schreiben.


grüße vom it-frosch
BlueEyePhoenix
BlueEyePhoenix 09.04.2021 um 15:37:15 Uhr
Goto Top
Hallo Frosch,

genau so stell ich mir das vor. Nur was für ein SQL Befehl muss ich dafür verwenden, geht das überhaupt über SQL?
em-pie
em-pie 09.04.2021 um 17:50:23 Uhr
Goto Top
Zitat von @BlueEyePhoenix:

Hallo Frosch,

genau so stell ich mir das vor. Nur was für ein SQL Befehl muss ich dafür verwenden, geht das überhaupt über SQL?

Dann teile uns doch erst einmal mit, welcher SQL-Server zum Einsatz kommt.
MS SQL 2008 oder MS SQL 2019
IBMs DB2 auf einer iSeries/ AS400 oder auf einer SLES/ Windows-Umgebung
Oracle-DB
MySQL
PostgreSQL
...

Ferner:
Was willst du mit dem zu setzenden Datum realisieren?
Geht es dir um einen Bericht/ eine Statistik?
Wird für jeden neuen Verbrauch eines Artikels ein neuer Datensatz erzeugt oder bestehende Datensätze aktualisiert?

Wenn du die Info nur in einem Bericht benötigst, würde ich nicht mit Triggern arbeiten, sondern mein obiges Script nutzen.
Willst du mit dem Datum indes weiterarbeiten, kann es durchaus sinnvoll sein, es in die DB zu schreiben..

Bin das gerade so am versuchen aber wenn sich jetzt das Datum vom letzten verbrauch anpassen würde dann bleibt das alte Datum nicht stehen oder?
Nein, das Datum würde nicht stehen bleiben. Obiges Query ist ja "nur" eine Darstellung, di zu keiner Datenveränderung führt.
Das ist quasi so, als wenn dein Geburtstag fest ist und du täglich wissen willst, wann du 18 Jahre geworden bist. Erst, wenn du dein Geburtstag ändern tätest, würde sich das Datum "Wann bin ich 18 geworden" ändern.
BlueEyePhoenix
BlueEyePhoenix 12.04.2021 um 10:17:17 Uhr
Goto Top
Hallo,

verwendet wird MS SQL 2019.

Realisieren möchte ich ein Startdatum welches mir immer sobald der letzte Verbrauch 14 Tage oder älter ist mir das Datum vom 14 Tag setzt.

Wenn es mehr Tage sein sollten ist der 14 Tage trotzdem der Stichtag.
Wenn es schneller als 14 Tage verbraucht wurde brauch es kein Datum.
Wenn es nach 14 Tagen verbraucht wird soll das Datum erst wieder aktualisiert werden wenn wieder die 14 Tage erreicht wurden.

Das Datum vom letzten Verbrauch wird immer angepasst sobald etwas Verbraucht wurde.

Nein, das Datum würde nicht stehen bleiben. Obiges Query ist ja "nur" eine Darstellung, di zu keiner Datenveränderung führt.
Das ist quasi so, als wenn dein Geburtstag fest ist und du täglich wissen willst, wann du 18 Jahre geworden bist. Erst, wenn du dein Geburtstag ändern tätest, würde sich das Datum "Wann bin ich 18 geworden" ändern.

Das heißt ich muss mir dazu wohl was anderes einfallen lassen.
em-pie
Lösung em-pie 12.04.2021 um 10:44:56 Uhr
Goto Top
Zitat von @BlueEyePhoenix:

Hallo,

verwendet wird MS SQL 2019.

Realisieren möchte ich ein Startdatum welches mir immer sobald der letzte Verbrauch 14 Tage oder älter ist mir das Datum vom 14 Tag setzt.

Wenn es mehr Tage sein sollten ist der 14 Tage trotzdem der Stichtag.
Wenn es schneller als 14 Tage verbraucht wurde brauch es kein Datum.
Wenn es nach 14 Tagen verbraucht wird soll das Datum erst wieder aktualisiert werden wenn wieder die 14 Tage erreicht wurden.

Das Datum vom letzten Verbrauch wird immer angepasst sobald etwas Verbraucht wurde.
Dann reicht dir mein obiges Script.

Das heißt ich muss mir dazu wohl was anderes einfallen lassen.
Teste es einfach mal aus und schaue, was passiert. Mit einem SELECT ... FROM ... änderst du ja keine Daten in der DB, nur in deiner Auswertung werden die Daten u.U. als Anzeige aktualisiert.