Sql server 如何在SQLServer2008中比较不同行和不同列中的值

Sql server 如何在SQLServer2008中比较不同行和不同列中的值,sql-server,Sql Server,我已经得到了下面的数据集,需要让它达到一个水平,它显示每天一行,每个人,每个产品ID。最终目标是能够比较基于tranTime的第一个previousStat与最近的currentStat tranDate productID tranTime previousSTAT currentSTAT FIRSTNAME 20140221 47444 10533900 NULL U S

我已经得到了下面的数据集,需要让它达到一个水平,它显示每天一行,每个人,每个产品ID。最终目标是能够比较基于tranTime的第一个previousStat与最近的currentStat

    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先生/女士,您太棒了!如果可以,我现在就吻你!我已经解决这个问题一天左右了,这让我发疯。非常感谢你!