Использование SQL для выбора данных за последнюю неделю - PullRequest
0 голосов
/ 03 февраля 2020

Каков наилучший способ выбора данных за предыдущую неделю? Ниже возвращается синтаксическая ошибка. ВЫБЕРИТЕ СЧЕТ (dbo.Calls.kbpCallID) NoofoutboundCalls FROM (((dbo.Calls СЛЕДУЕТ ВНЕШНЕЕ ОБЪЕДИНЕНИЕ Calls.kbpcontactid = dbo.OrganizationContacts.cmccontactid) ВЛЕВО НАРУЖНОЕ СОЕДИНЕНИЕ .cmlapinvoicecontactid) ВЛЕВО НАРУЖНОЕ СОЕДИНЕНИЕ с dbo.Organizations ON dbo.Calls.kbpOrganizationID = dbo.Organizations.cmoOrganizationID) * * ГДЕ dbo.Calls.kbpOpenedDate = DATEADD (неделя, -1,) ИЛИ dbo.Organizations.cmoCustomerStatus = 2) И dbo.Calls.kbpCallTypeID = 'SALOB'

Ответы [ 2 ]

1 голос
/ 03 февраля 2020

Вы не завершили синтаксис для функции DATEADD.

DATEADD требует 3 параметра:

  1. Фактор функции - в вашем случае WEEK
  2. Количество интервалов - в вашем случае -1
  3. Столбец, с которым вы взаимодействуете - в вашем случае это отсутствует

Как кажется, основано на текущую дату, я думаю, вы хотите, чтобы эта строка была:

`WHERE dbo.Calls.kbpOpenedDate = DATEADD(week, -1, GETDATE())`

Однако, это также определенная c дата и время, когда вы ищете равенство. Скорее всего, вы ищете диапазон, поэтому вам, возможно, придется использовать больше, чем вместо равно или включить другой DATEADD, чтобы определить начальный / конечный диапазон наряду с этим.

0 голосов
/ 03 февраля 2020

попробуйте так

DECLARE @startDate DATETIME= DATEADD(DAY, 2 - DATEPART(WEEKDAY, GETDATE()-7), CAST(GETDATE()-7 AS DATE))
DECLARE @endDate DATETIME= DATEADD(DAY, 8 - DATEPART(WEEKDAY, GETDATE()-7), CAST(GETDATE()-7 AS DATE)) 

SELECT
COUNT(dbo.Calls.kbpCallID) NoofoutboundCalls
FROM (((dbo.Calls 
LEFT OUTER JOIN dbo.OrganizationContacts ON dbo.Calls.kbpOrganizationID = dbo.OrganizationContacts.cmcOrganizationID and dbo.Calls.KbplocationID = dbo.OrganizationContacts.cmclocationID and dbo.Calls.kbpcontactid = dbo.OrganizationContacts.cmccontactid) 
LEFT OUTER JOIN dbo.OrganizationLocations ON dbo.OrganizationContacts.cmcOrganizationID = dbo.OrganizationLocations.cmlOrganizationID and dbo.OrganizationContacts.cmclocationId = dbo.OrganizationLocations.cmllocationid and dbo.OrganizationContacts.cmccontactid = dbo.organizationlocations.cmlapinvoicecontactid) 
LEFT OUTER JOIN dbo.Organizations ON dbo.Calls.kbpOrganizationID = dbo.Organizations.cmoOrganizationID)    
**WHERE  dbo.Calls.kbpOpenedDate BETWEEN @startDate AND @endDate** 
AND (dbo.Organizations.cmoCustomerStatus  =  1 OR dbo.Organizations.cmoCustomerStatus  =  2) 
AND dbo.Calls.kbpCallTypeID  =  'SALOB'        
...