如何比较SQL Server 2008中不同行和不同列中的值

时间:2015-03-18 03:57:04

标签: sql-server

我已经获得了以下数据集,并且需要将其设置为每人每个产品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 个答案:

答案 0 :(得分:0)

如何为您感兴趣的每个组分配行号,以便第一行代表第一行?然后再次执行相同操作,但使用反向排序,以便第一行代表最后一行。然后将这两个表连接在一起。类似的东西:

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