检索每个记录SQL Server的上一个日期

时间:2015-07-29 18:50:58

标签: sql sql-server

我想检索每条记录的先前客户合约生效日期。如何编写查询以便它会给我以下结果?这是为sql server。我使用过partition by吗?谢谢!

Customer Eff_Date   Previous_Eff  
     A    1/1/2013    NULL   
     A    2/1/2014    1/1/2013   
     A    3/1/2015    2/1/2014    
     B    2/1/2014    NULL   
     B    3/1/2014    2/1/2014  

2 个答案:

答案 0 :(得分:3)

{ token: '123456789',
  barcode: [ '0123456789', '987654321', '45243453', '987654321' ] }
total = 4
0
0123456789
Debug 1
Debug 5
1
987654321
Debug 1
Debug 5
2
45243453
Debug 1
Debug 5
3
987654321
Debug 1
Debug 5
Debug 6
Debug 7
Debug 2
Debug 3
Debug 4
[ { unitprice: 10 } ]
Debug 2
Debug 3
Debug 4
[]
Debug 2
Debug 3
Debug 4
[ { unitprice: 30 } ]
Debug 2
Debug 3
Debug 4
[ { unitprice: 30 } ]

您可以使用select customer, eff_date, lag(eff_date) over(partition by customer order by eff_date) as previous_eff from tablename; 函数获取上一行的effdate的值。

如果您使用的是早于2012年的SQL Server版本,则这是使用lag函数执行此操作的另一种方法。

row_number

SQL小提琴:http://sqlfiddle.com/#!3/faf40/9

答案 1 :(得分:0)

这是使用可在大多数dbs上运行的子查询选择上一个日期的方法

select *, 
    (select max(Eff_Date) from mytable b
    where b.Customer = a.Customer
    and b.Eff_Date < a.Eff_Date) Previous_Eff
from mytable a