使用SQL选择上周的数据

问题描述 投票:-2回答:2

上一周选择数据的最佳方法是什么?以下返回语法错误。选择COUNT(dbo.Calls.kbpCallID)NoofoutboundCallsFROM((((dbo.Calls OUTER JOIN OUTER JOIN dbo。左外部加入dbo.OrganizationLocations上的dbo.OrganizationLocations = cm2.dml.OrganizationIDs。左外部加入dbo.dbo.Calls.kbpOrganizationID = dbo.Organizations.cmoOrganizationID上的组织)* *dbo.Calls.kbpOpenedDate = DATEADD(week,-1,)* * AND(dbo.Organizations.cmoCustomerStatus = 1或dbo.Organizations.cmoCustomerStatus = 2)AND dbo.Calls.kbpCallTypeID ='SALOB'

sql sql-server tsql dateadd
2个回答
1
投票

您尚未完成DATEADD函数的语法。

DATEADD需要3个参数:

  1. 功能的细微之处-在您的情况下为周
  2. 间隔数-在您的情况下为-1
  3. 您正在交互的列-在您的情况下,此列缺失

因为它似乎是基于当前日期,所以我认为您希望该行为:

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

但是,这也是您要寻求平等的具体日期和时间。您更有可能正在寻找一个范围,因此您可能必须使用大于而不是等于或包含另一个DATEADD来定义此范围的开始/结束范围。


0
投票

尝试这种方式

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'        
© www.soinside.com 2019 - 2024. All rights reserved.