Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何选择SQL表中日期在上周内但仅当EQNum在过去6个月内未出现时的所有条目_Sql Server - Fatal编程技术网

Sql server 如何选择SQL表中日期在上周内但仅当EQNum在过去6个月内未出现时的所有条目

Sql server 如何选择SQL表中日期在上周内但仅当EQNum在过去6个月内未出现时的所有条目,sql-server,Sql Server,我非常熟悉SQL。我希望编写一个脚本,从满足两个条件的表中选择所有列: 通话日期必须在过去7天内发生 EQNum在过去六个月内一定没有接到另一个电话 下面是一个示例表: Call, Date, EQNum, Customer 123, 06-16-2015, 75, ABC Co 125, 06-16-2015, 82, XYZ Co 133, 06-14-2015, 69, DEF Co 101, 05-12-2015, 82, XYZ C

我非常熟悉SQL。我希望编写一个脚本,从满足两个条件的表中选择所有列:


  • 通话日期必须在过去7天内发生
  • EQNum在过去六个月内一定没有接到另一个电话
  • 下面是一个示例表:

    Call, Date,       EQNum, Customer
    
    123,  06-16-2015, 75,     ABC Co
    125,  06-16-2015, 82,     XYZ Co
    133,  06-14-2015, 69,     DEF Co
    101,  05-12-2015, 82,     XYZ Co
    115,  10-11-2014, 69,     DEF Co
    
    我需要创建的查询应返回:

    123, 06-16-2015, 75, ABC Co 
    133, 06-14-2015, 69, DEF Co
    
    取消调用125(EQNum 82),因为虽然在过去一周内发生了调用,但EQNum 82在过去6个月内发生了另一个调用(调用101),因此取消了调用

    调用133是有效的,因为EQNum 69的另一个调用发生在6个多月前。

    类似以下内容:

    SELECT *
    from tbl
    WHERE DateCol > DATEADD(day, -7, getdate())
    AND NOT EXISTS (SELECT TOP 1 1 
                    FROM tbl this 
                    WHERE this.EQNum = tbl.EQNum 
                        AND this.DateCol > DATEADD(month, -6, getdate())
                   )
    

    这是一种方法,尽管如果桌子太大,它可能不会表现得很好

    select
      Call, 
      [Date], 
      EQNum, 
      Customer
    from #table
    where 
      [Date] > getdate() - 7 and
      EQNum not in 
      (
        select
          EQNum
        from #table
        where
          [Date] > DATEADD(month, -6, getdate())
        group by
           EQNum
        having count(*) > 1
      )
    
    另一种方法是左加入

    select
      Call, 
      [Date], 
      EQNum, 
      Customer
    from #table t1
      left join #table t2 on
        t1.Call != t2.Call and
        t1.EQNum = t2.EQNum and
        t2.Date > DATEADD(month, -6, getdate())
    where
      t1.[Date] > getdate() - 7 and
      t2.Call is null
    

    到目前为止,您有哪些信息?“通话日期必须在过去7天内发生”更新为包括过去7天,以及过去6个月内的子查询。