【问题标题】: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 个参数:

  1. 函数的粒度 - 在你的情况下是 WEEK
  2. 间隔数 - 在您的情况下为 -1
  3. 您正在交互的列 - 在您的情况下,这是缺失的

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

`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'        
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-30
      • 2015-09-08
      • 2018-10-31
      • 1970-01-01
      • 2013-10-25
      • 1970-01-01
      • 1970-01-01
      • 2021-04-14
      相关资源
      最近更新 更多