Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.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
TSQL-使用自联接比较两列-计算昨天总计和#x27;今天';总共_Sql_Tsql_Sql Server 2014 - Fatal编程技术网

TSQL-使用自联接比较两列-计算昨天总计和#x27;今天';总共

TSQL-使用自联接比较两列-计算昨天总计和#x27;今天';总共,sql,tsql,sql-server-2014,Sql,Tsql,Sql Server 2014,我试图在一列中计算今天和昨天总数之间的差异。如果自连接不是最好的方法,那也没关系,无论哪种方法能给出我想要的结果都应该可以 要求: 仅比较最近2天的数据,即使该表将有多天的数据,但每天只有一个条目 计算该列昨天总计与今天总计之间的差值 问题 下面的代码返回零,我不明白为什么 为什么不计算,我该怎么做才能满足要求 我想您需要lag(): 如果您只想要最后两天,那么: select top (1) t.* from (select t.*, (empcount - lag

我试图在一列中计算今天和昨天总数之间的差异。如果自连接不是最好的方法,那也没关系,无论哪种方法能给出我想要的结果都应该可以

要求:

  • 仅比较最近2天的数据,即使该表将有多天的数据,但每天只有一个条目
  • 计算该列昨天总计与今天总计之间的差值
  • 问题

    下面的代码返回零,我不明白为什么

    为什么不计算,我该怎么做才能满足要求


    我想您需要
    lag()

    如果您只想要最后两天,那么:

    select top (1) t.*
    from (select t.*,
                 (empcount - lag(empcount) over (order by countdate)) as diff
          from #t1 t
         ) t
    order by countdate desc;
    
    注:这将“昨天”解释为表中的最后两天。如果您确实想要今天和昨天,那么可以使用
    where
    子句:

    select top (1) t.*
    from (select t.*,
                 (empcount - lag(empcount) over (order by countdate)) as diff
          from #t1 t
          where countdate >= dateadd(day, -1, convert(date, getdate()))
         ) t
    order by countdate desc;
    
    我想您需要
    lag()

    如果您只想要最后两天,那么:

    select top (1) t.*
    from (select t.*,
                 (empcount - lag(empcount) over (order by countdate)) as diff
          from #t1 t
         ) t
    order by countdate desc;
    
    注:这将“昨天”解释为表中的最后两天。如果您确实想要今天和昨天,那么可以使用
    where
    子句:

    select top (1) t.*
    from (select t.*,
                 (empcount - lag(empcount) over (order by countdate)) as diff
          from #t1 t
          where countdate >= dateadd(day, -1, convert(date, getdate()))
         ) t
    order by countdate desc;
    

    旁白:将
    datetime
    用于
    date
    值可能会有问题。除了午夜,你还有其他时间值吗?@HABO,是的,有时我想知道它发生的时间,以确保它在另一个进程之后发生。旁白:使用
    datetime
    表示
    date
    值可能会有问题。你真的有午夜以外的时间值吗?@HABO,是的,有时候我想知道它发生的时间,以确保它在另一个过程之后发生。谢谢@GordonLinoff。当我将empcount更改为INT时,这起作用了。我感谢你的帮助!谢谢@GordonLinoff。当我将empcount更改为INT时,这起作用了。我感谢你的帮助!