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ď č. 1Vaš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