1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen
  2. Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, Oracle, Sql-Server, Postgres, Access uvm
    Information ausblenden

ab aktuellen Wert 30 Tage zurück

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von Thomas220, 25 Januar 2012.

  1. Thomas220

    Thomas220 Benutzer

    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
     
  2. ukulele

    ukulele Datenbank-Guru

    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)
     
  3. Thomas220

    Thomas220 Benutzer

    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
     
  4. ukulele

    ukulele Datenbank-Guru

    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?
     
  5. Thomas220

    Thomas220 Benutzer

    :) :) :)
    Genau das wars. Den Datumswert getauscht und - schon klappts auch mit dem Nachbar.
    Vielen, vielen Dank.
    Thomas
     
Die Seite wird geladen...

Diese Seite empfehlen