将2列SQL表转换为3列,第3列滞后于2

时间:2013-12-23 18:04:59

标签: sql sqlanywhere squirrel-sql

这是我的问题:我想写一个查询(进入一个更大的查询),它采用这样的表格;

ID | DATE  
A  | 1  
A  | 2  
A  | 3  
B  | 1  
B  | 2  

依此类推,并将其转换为;

ID | DATE1 | DATE2  
A  | 1     | 2  
A  | 2     | 3  
A  | 3     | NOW  
B  | 1     | 2  
B  | 2     | NOW  

如果数字是日期,则NOW()始终附加到最近的日期。鉴于自由,我会在Python中执行此操作,但不幸的是,这会进入更大的查询。我想我们正在使用SyBase的SQL Anywhere 12吗?我使用SQuirreL SQL与数据库进行交互。

我很难过。我认为(SQL query to transform a list of numbers into 2 columns)会有所帮助,但我恐怕我不知道它是否有效。我在考虑JOIN表格本身,但我不知道如何SELECT仅针对A-1-2行而不是A-1-3行,实例,或如何将NOW()值插入其中。有没有人有任何想法?

1 个答案:

答案 0 :(得分:0)

我创建了一个sqlfiddle.com来概述您的示例的解决方案。你提到日期,但使用整数,所以我选择做一个整数的例子,但它可以修改。我在postgresql中写了它,所以coalesce()函数可以用nvl()或类似的代替。此外,参数“0”可以替换为任何值,包括now(),但您还必须将表中“i”列的数据类型更改为日期。如果您需要进一步的帮助,请告诉我。

select a.id, a.i, coalesce(min(b.i),'0') from
test a
left join test b on b.id=a.id and a.i<b.i
group by a.id,a.i
order by a.id, a.i

http://sqlfiddle.com/#!15/f1fba/6