如何解决TSQL-比较具有自我连接的两列-计算昨天总计与今天总计之间的差额
我正在尝试在列上计算今天和昨天的总数之差。如果不是最好的自我加入方式,那就好了,无论哪种方式都能给我带来我想要的结果。
要求:
- 仅比较过去两天的数据,即使表将具有多天的数据,但每天也只有一个条目。
- 计算该列的昨天总计与今天总计之间的差。
问题
下面的代码返回零,我不明白为什么。
为什么不计算?我该怎么做才能满足要求?
IF OBJECT_ID('tempdb..#t1') IS NOT NULL DROP TABLE #t1
CREATE TABLE #t1 (
countID UNIQUEIDENTIFIER,empCount VARCHAR(20),CountDate DATETIME
)
INSERT INTO #t1 (
countID,empCount,CountDate
)
VALUES
(NEWID(),'123000',GETDATE()),(NEWID(),'100','20200813'),'20200810')
SELECT
today.countID,(CAST(today.empCount AS INT)) - (CAST(yesterday.empCount AS INT)) AS CountDiff,today.empCount,today.CountDate
FROM #t1 AS today
INNER JOIN #t1 AS yesterday ON today.countID = yesterday.countID
AND yesterday.CountDate > (SELECT dateadd(day,datediff(day,2,0))
解决方法
我认为您想要lag()
:
select t.*,(empcount - lag(empcount) over (order by countdate)) as diff
from #t1 t;
如果只想要最后两天,则:
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;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。