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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 665582
Url: https://administrator.de/forum/sql-setze-festen-wert-wenn-665582.html
Ausgedruckt am: 22.12.2024 um 08:12 Uhr
13 Kommentare
Neuester Kommentar
Moin,
welches DBMS kommt zum Einsatz?
Wenn MS SQL, dann sähe das so aus:
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
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
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?
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?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
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
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
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?
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.
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.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.
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.