/ / Použitie medzi v príkazovom prípade nefunguje - sql, sql-server

Použitie medzi príkazom v prípade, že nefunguje - sql, sql-server

Mám nasledujúci dotaz na vygenerovanie prehľadu, pomocou ktorého sa má skontrolovať, či je dátum v rozmedzí.

Z nejakého dôvodu to nefunguje, hoci keď odošle údaje, ktoré viem, je to správne.

Akékoľvek nápady, prečo nefunguje?

Tu je môj SQL

SELECT @ReportDate
SELECT DATEADD(dd, -1, @ReportDate), DATEADD(dd, -30, @ReportDate)

SELECT  i.Total, i.DateDue, c.Email,
CASE
WHEN i.DateDue BETWEEN DATEADD(dd, -1, @ReportDate) AND DATEADD(dd, -30, @ReportDate) THEN "1 - 30"
WHEN i.DateDue BETWEEN DATEADD(dd, -31, @ReportDate) AND DATEADD(dd, -60, @ReportDate) THEN "31 - 60"
WHEN i.DateDue BETWEEN DATEADD(dd, -61, @ReportDate) AND DATEADD(dd, -90, @ReportDate) THEN "61 - 90"
WHEN i.DateDue BETWEEN DATEADD(dd, -91, @ReportDate) AND DATEADD(dd, -120, @ReportDate) THEN "91 - 120"
ELSE "> 120" END
AS [Group]
FROM    Data i

A výsledky údajov:

ReportDate
2014-07-03 11:46:02.467

First Range
Start                   End
2014-07-02 11:46:02.467 2014-06-03 11:46:02.467

Total   DateDue                 Email                   Range
121535  2014-06-17 08:50:05.440 customer3@example.com   > 120
833208  2014-06-26 08:50:19.613 customer3@example.com   > 120
381400  2014-06-18 08:50:20.177 exmployee1@example.com  > 120

odpovede:

3 pre odpoveď č. 1

Vaše rozsahy sú obrátené - dátum vľavo od BETWEEN je vždy po dátum vpravo. Prepnite strany, aby váš dopyt fungoval podľa očakávania:

SELECT  i.Total, i.DateDue, c.Email,
CASE
WHEN i.DateDue BETWEEN DATEADD(dd, -30, @ReportDate) AND DATEADD(dd, -1, @ReportDate) THEN "1 - 30"
WHEN i.DateDue BETWEEN DATEADD(dd, -60, @ReportDate) AND DATEADD(dd, -31, @ReportDate) THEN "31 - 60"
WHEN i.DateDue BETWEEN DATEADD(dd, -90, @ReportDate) AND DATEADD(dd, -61, @ReportDate) THEN "61 - 90"
WHEN i.DateDue BETWEEN DATEADD(dd, -120, @ReportDate) AND DATEADD(dd, -91, @ReportDate) THEN "91 - 120"
ELSE "> 120" END
AS [Group]
FROM    Data i