【问题标题】:Using SQL to select data from last week使用 SQL 选择上周的数据
【发布时间】:2020-02-03 05:04:13
【问题描述】:
选择上周数据的最佳方法是什么?下面返回一个语法错误。
选择
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)
左外连接 dbo.OrganizationLocations ON dbo.OrganizationContacts.cmcOrganizationID = dbo.OrganizationLocations.cmlOrganizationID AND dbo.OrganizationContacts.cmclocationId = dbo.OrganizationLocations.cmllocationid AND dbo.OrganizationContacts.cmccontactid = dbo.organizationlocations.cmlapinvoicecontactid)
左外连接 dbo.Organizations ON dbo.Calls.kbpOrganizationID = dbo.Organizations.cmoOrganizationID) * *
WHERE dbo.Calls.kbpOpenedDate = DATEADD(week, - 1,) * * AND (dbo.Organizations.cmoCustomerStatus = 1 OR dbo.Organizations.cmoCustomerStatus = 2) AND dbo.Calls.kbpCallTypeID = 'SALOB'
【问题讨论】:
标签:
sql
sql-server
tsql
dateadd
【解决方案1】:
您尚未完成DATEADD 函数的语法。
DATEADD 需要 3 个参数:
- 函数的粒度 - 在你的情况下是 WEEK
- 间隔数 - 在您的情况下为 -1
- 您正在交互的列 - 在您的情况下,这是缺失的
由于它似乎基于当前日期,所以我认为您希望该行是:
`WHERE dbo.Calls.kbpOpenedDate = DATEADD(week, -1, GETDATE())`
但是,这也是您正在寻找平等的特定日期和时间。您更有可能正在寻找一个范围,因此您可能必须使用大于而不是等于或包含另一个 DATEADD 来定义开始/结束范围以及这个范围。
【解决方案2】:
试试这个方法
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'