繁体   English   中英

在SQL中获取先前的记录列值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM