ab aktuellen Wert 30 Tage zurück

Thomas220

Benutzer
Beiträge
17
Hallo zusammen, bin relativ neu bei MS-SQL und habe blauäugig gedacht, man kann das so machen:
Code:
select distinct uhrzeit, scann_datum
from dbo.bericht_kum
where Scann_datum between  (select MAX(scann_datum) from dbo.bericht_kum)
and  (select MAX(scann_datum) from dbo.bericht_kum)-30

Fehler:
Operand type clash: date is incompatible with int

Ich dachte, man nimmt einen Datumswert, zieht von dem 30 Tage ab und hat einen neuen Datumswert. Geht aber so nicht. Wie kriege ich das hin, dass er mir Daten der letzten 30 (oder 25 oder 240) Tage anzeigt?
Vielen Dank
Thomas
 
Werbung:
Also mit DATETIME geht das. Mit DATE kann ich die Meldung reproduzieren. Warum das so ist versteh ich auch nicht, aber es gibt jede Menge Möglichkeiten (z.B. in DATETIME konvertieren etc.)

Ich hab mal eine tolle Funktion gegooglet:
Code:
DECLARE    @test DATE
 
SET        @test = getdate()
SET        @test = dateadd(day,-30,@test)
 
SELECT    @test

Code:
select distinct uhrzeit, scann_datum
from dbo.bericht_kum
where Scann_datum between  (select MAX(scann_datum) from dbo.bericht_kum)
and  (select dateadd(day,-30,MAX(scann_datum)) from dbo.bericht_kum)
 
Hallo ukulele, vielen Dank für die Hilfe.
Geht leider nicht so. Irgendetwas passt nicht. Nehme ich die beiden Terme einzeln her, dann sind das richtige Datum enthalten.
Also (select MAX(scann_datum) from dbo.bericht_kum) ergibt das höchste Datum und select dateadd(day,-30,MAX(scann_datum)) from dbo.bericht_kum ergibt das Datum, welches 30 Tage zurückliegt. Aber in der between geht das nicht. Schon komisch.
Es kommt keine Fehlermeldung, aber die Ergebnismenge ist leer. Schreib ich das Datum von Hand rein (das zweite), dann geht es. Hat das vielleicht was mit der Schreibweise des Datums zu tun? Heute='2012-01-31' -30Tage = '2012-01-01'.

Viele Grüße
Thomas
 
Also ich hab ein bischen rum probiert:
Auf älteren MSSQL gibts kein DATE Datentyp bei mir, nur auf neueren (Test mit SQL 2008 R2).
Mit einer Testtabelle test Spate datum DATE geht es:
Code:
SELECT    *
FROM    dbo.test
 
2012-01-20
2012-01-10
2012-01-30
 
SELECT    *
FROM    dbo.test
WHERE    datum    BETWEEN    ( SELECT dateadd(day,-15,max(datum)) FROM dbo.test )
                    AND ( SELECT max(datum) FROM dbo.test )
 
2012-01-20
2012-01-30
Allerdings hab ich in meinem Vorpost die Datumswerte vertauscht, max(datum)-30 Tage kommt natürlich vor max(datum), ist vieleicht das der Grund?
 
Werbung:
Zurück
Oben