Как кодировать диапазон дат в SQL QUERY до go назад через 3 недели от текущей даты и Go пересылать через 1 неделю от текущей даты - PullRequest
0 голосов
/ 22 апреля 2020

- Этот код извлекает только даты исполнения в течение следующих 7 дней, он игнорирует последние 21 день. 1005 * вперед на 1 неделю с текущей даты

select top 10  D.VendID as Customer , D.DueDate, sum(CuryTranAmt) as Amount, C.CpnyName Company 
  from APTran A
  left join APDoc D
  on A.RefNbr = D.RefNbr
  inner join [SIVSYS].[dbo].[Company] C
  on D.CpnyID = C.CpnyID

  where 
  A.trantype NOT IN ('CK', 'HC')
  and A.DrCr like 'C'
  and (D.DueDate BETWEEN GETDATE() AND DATEADD(DAY, -21, GETDATE())) OR (D.DueDate BETWEEN GETDATE() AND DATEADD(DAY, +7, GETDATE()))

  and D.DocBal <> '0'

  group by 
  D.VendID
 ,C.CpnyName
 ,D.DueDate
 ,A.CuryTranAmt
 ,D.RefNbr
 ,D.BatNbr
 order by (A.CuryTranAmt) desc

1 Ответ

1 голос
/ 22 апреля 2020

У вашего первого условия границы between инвертированы: нижняя граница больше верхней границы, поэтому никакая дата не может соответствовать этому.

Я думаю, что вы просто хотите:

where d.dueDate 
    between dateadd(day, -21, getdate())
    and dateadd(day, 7, getdate())

Возможно, вы хотите целых дней, поэтому:

where 
    d.dueDate >= dateadd(day, -21, cast(getdate() as date))
    and d.dueDate < dateadd(day, 6, cast(getdate() as date))
...