Sql server 我需要每个记录的最后一个值和最后第二个值之间的差值

Sql server 我需要每个记录的最后一个值和最后第二个值之间的差值,sql-server,sql-server-2008,tsql,sql-server-2008-r2,Sql Server,Sql Server 2008,Tsql,Sql Server 2008 R2,每个客户机有两个表1和表2,第一条记录进入表1,然后该客户机的更多记录进入表2。 现在我想知道最后一条记录和为该客户机添加的第二条记录之间的差异。假设X是客户的最后一个增值,Y是客户的第二个最后一个增值。我想要结果集中的值X-Y=Value。我附上了表格的屏幕截图和期望的结果集 每个客户机在表1中都有一条记录,但在表2中可能有记录,也可能没有记录,只有第一条记录进入表1 如果最后两条记录都在表2中,那么我需要它们之间的差值 我的限制是我无法创建存储过程,因为此查询正在插入第三方软件,我只能在其中

每个客户机有两个表1和表2,第一条记录进入表1,然后该客户机的更多记录进入表2。 现在我想知道最后一条记录和为该客户机添加的第二条记录之间的差异。假设X是客户的最后一个增值,Y是客户的第二个最后一个增值。我想要结果集中的值X-Y=Value。我附上了表格的屏幕截图和期望的结果集

每个客户机在表1中都有一条记录,但在表2中可能有记录,也可能没有记录,只有第一条记录进入表1 如果最后两条记录都在表2中,那么我需要它们之间的差值


我的限制是我无法创建存储过程,因为此查询正在插入第三方软件,我只能在其中执行ah hoc sql或UDF,但不能执行存储过程:。

首先使用cte将所有记录放在一个结果中

然后通过两次将其连接到原始表1来构造查询

with combined (clientid, date, column3) as
(select clientid, date, column3 from table1
 union all
select clientid, date, column3 from table2)
select t1.clientid, t1.column1, t1.column2, 
       l.column3-nl.column3   
from table1 t1
  join combined l  -- the last record
     on l.clientid = t1.clientid
       and l.date = (select max(date) 
                     from combined 
                     where clientid = t1.clientid)
  join combined nl -- the next to last record
     on nl.clientid = t1.clientid
       and nl.date = (select max(date) 
                     from combined 
                     where clientid = t1.clientid
                        and date < l.date)

78减33等于45,不负45你完全搞定了Charles我希望我能给你100个ups来回答这个问题非常感谢Charles你是一张王牌:先生。嗨Charles说如果表二有每个客户的多个记录,并且在CTE中,我只筛选了一个客户的所有记录,现在我希望添加的记录与最后添加的记录不同为客户服务。你能给我一些建议吗。。。。在结果集中,我将返回一个客户机的所有记录以及与上一个记录的值的差异。