Eu tenho a seguinte consulta para gerar um relatório, usando entre para verificar se uma data está em um intervalo.
Por alguma razão, isso não está funcionando, embora quando eu os dados saibam que está correto.
Alguma idéia porque não está funcionando?
Aqui está meu 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
E os resultados dos dados:
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
Respostas:
3 para resposta № 1Seus intervalos são invertidos - a data à esquerda de BETWEEN
é sempre depois de a data à direita. Alterne os lados para que sua consulta funcione conforme o esperado:
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