【问题标题】:Get previous record column value in SQL在 SQL 中获取上一个记录列的值
【发布时间】:2015-01-07 18:17:36
【问题描述】:

我有一个包含 3 列的表:日期、姓名、工资

我想查询该表并在结果集中添加另一个可以有 2 个值的计算列:“新”和“相同”。

赋值的规则是:按日期升序排列记录。如果当前记录的名称与上一条记录的名称不同,则新列值将为“开始”,否则(如果相同)它将为“相同”。

我该怎么做?是否有函数(类似于 prevRow())?还是我必须“耍花招”?

如何在 mysql 和 DB2 中做到这一点?

【问题讨论】:

  • 对不起,我已经编辑了 db2 解决方案的问题。谢谢!

标签: mysql sql db2 record recordset


【解决方案1】:

你可以使用这样的查询

set @last_val = "";
select 
    if(@last_val = column,"same","start") as state,
    @last_val := colum as temp
 from table
 ;

【讨论】:

    【解决方案2】:

    取决于您使用的数据库,MS SQL 有一个滞后功能:http://msdn.microsoft.com/en-us/library/hh231256.aspx

    有一个 mysql hack 可以解决这个问题,看看这个问题:Simulate lag function in MySQL how to do lag operation in mysql

    【讨论】:

    【解决方案3】:

    似乎 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
    

    【讨论】:

      猜你喜欢
      • 2021-08-31
      • 1970-01-01
      • 1970-01-01
      • 2014-06-01
      • 1970-01-01
      • 2016-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多