我有一个包含3列的表:日期,名称,工资
我想查询表并在结果集中添加另一个可以有2个值的计算列:' new'和'相同'。
分配值的规则是:按日期升序排序记录。如果当前记录的名称与前一记录的名称不同,则新列值将为“开始”#39;否则(如果它是相同的)它将是相同的'。
我该怎么做?是否有一个函数(像prevRow())?或者我必须制作一个"技巧"?
我如何在mysql和DB2中执行此操作?
答案 0 :(得分: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
答案 1 :(得分:2)
似乎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
答案 2 :(得分:1)
你可以使用这样的查询
set @last_val = "";
select
if(@last_val = column,"same","start") as state,
@last_val := colum as temp
from table
;