使用上周的 SQL 到 select 数据
Using SQL to select data from last week
获取上周 select 数据的最佳方法是什么?下面的 returns 语法错误。
SELECT
计数(dbo.Calls.kbpCallID)NoofoutboundCalls
从 (((dbo.Calls 左外连接 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 在 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'
试试这个方法
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'
您还没有完成 DATEADD
函数的语法。
DATEADD
需要3个参数:
- 函数的粒度 - 在你的情况下是 WEEK
- 间隔数 - 你的情况是 -1
- 您正在交互的列 - 在您的情况下,它丢失了
因为它似乎是基于当前日期,所以我认为您希望该行是:
`WHERE dbo.Calls.kbpOpenedDate = DATEADD(week, -1, GETDATE())`
但是,这也是您寻求平等的特定日期和时间。您更有可能正在寻找一个范围,因此您可能必须使用大于而不是等于或包含另一个 DATEADD
来定义 start/end 范围以及这个范围。
获取上周 select 数据的最佳方法是什么?下面的 returns 语法错误。 SELECT 计数(dbo.Calls.kbpCallID)NoofoutboundCalls 从 (((dbo.Calls 左外连接 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 在 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'
试试这个方法
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'
您还没有完成 DATEADD
函数的语法。
DATEADD
需要3个参数:
- 函数的粒度 - 在你的情况下是 WEEK
- 间隔数 - 你的情况是 -1
- 您正在交互的列 - 在您的情况下,它丢失了
因为它似乎是基于当前日期,所以我认为您希望该行是:
`WHERE dbo.Calls.kbpOpenedDate = DATEADD(week, -1, GETDATE())`
但是,这也是您寻求平等的特定日期和时间。您更有可能正在寻找一个范围,因此您可能必须使用大于而不是等于或包含另一个 DATEADD
来定义 start/end 范围以及这个范围。