Sql server 如何在SQLServer2008中比较不同行和不同列中的值
我已经得到了下面的数据集,需要让它达到一个水平,它显示每天一行,每个人,每个产品ID。最终目标是能够比较基于tranTime的第一个previousStat与最近的currentStatSql server 如何在SQLServer2008中比较不同行和不同列中的值,sql-server,Sql Server,我已经得到了下面的数据集,需要让它达到一个水平,它显示每天一行,每个人,每个产品ID。最终目标是能够比较基于tranTime的第一个previousStat与最近的currentStat tranDate productID tranTime previousSTAT currentSTAT FIRSTNAME 20140221 47444 10533900 NULL U S
tranDate productID tranTime previousSTAT currentSTAT FIRSTNAME
20140221 47444 10533900 NULL U SHAUN
20140221 47444 10553700 U U SHAUN
20140304 47444 11133300 U U TIMOTHY
20140304 47444 11204900 U U TIMOTHY
20140305 47444 9133300 U Y TIMOTHY
20140305 47444 9204900 Y Y TIMOTHY
根据以下规定:
tranDate productID previousSTAT currentSTAT FIRSTNAME
20140221 47444 NULL U SHAUN
20140304 47444 U U TIMOTHY
20140305 47444 U Y TIMOTHY
如果人们能提供任何帮助,我们将不胜感激
问候,,
Gabbaii将行号分配给您感兴趣的每个组,让第一行代表第一行如何?然后再次执行相同操作,但顺序相反,以便第1行代表最后一行。然后将这两个表连接在一起。比如:
With minvalues as
(Select tranDate,productId, previousStat, firstname, row_number()
over (partition by tranDate,productId, firstname order by tranTime asc as rownum)
With maxvalues as
(Select tranDate,productId, currentStat, firstname, row_number()
over partition by tranDate,productId,firstname order by tranTime desc as rownum)
Select min.tranDate,min.productId,min.Previousstat, max.currentStat, min.firstname
From minvalues as min inner join maxvalues as max
on min. tranDate = max.tranDate
and min.productId = max.productId
and min.firstname = max.firstname
and min.rownum = 1
and max.rownum = 1
只需在您需要的列上执行
分组,如选择。。。从…起哪里按trandate、productID、previousstat、currentstat、firstname分组此示例不是最好的示例,因为它没有解释tranTime如何影响事情,但是如果您使用的是SQL Server 2012或更新版本,则LAG-函数可以帮到您。tranTime指示事务发生的时间。因此,在结束状态下,我想比较第一个previousStat值和最后一个currentStat值。那么,它是哪个版本的SQL Server?@dean SQL Server 2008先生/女士,您太棒了!如果可以,我现在就吻你!我已经解决这个问题一天左右了,这让我发疯。非常感谢你!