[英]Get previous record column value in SQL
我有一个表,该表具有3列:日期,名称,薪水
我想查询表并在结果集中添加另一个可以具有2个值的计算列:“ new”和“ same”。
分配值的规则是:按日期升序记录订单。 如果当前记录的名称与先前记录的名称不同,则新列的值将为“开始”,否则(如果相同)将为“相同”。
我怎样才能做到这一点? 是否有功能(如prevRow())? 还是我必须做一个“把戏”?
我该如何在mysql和DB2中做到这一点?
取决于您使用的数据库,MS SQL具有滞后功能: http : //msdn.microsoft.com/zh-cn/library/hh231256.aspx
为此有一个mysql hack,请检查以下问题: 在MySQL中模拟滞后函数 如何在mysql中进行滞后操作
看来DB2(至少是9.7之后的版本)支持LAG()窗口函数,因此此查询应该可以工作(尽管我无法对其进行测试):
SELECT
date,
name,
salary
CASE
WHEN lag(name, 1) OVER (ORDER BY date ASC) = name THEN 'same'
ELSE 'start'
END AS calc_col
FROM your_table
ORDER BY date ASC
您可以使用这样的查询
set @last_val = "";
select
if(@last_val = column,"same","start") as state,
@last_val := colum as temp
from table
;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.