1

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

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 与数据库交互。

我很困惑。我认为(将数字列表转换为 2 列的 SQL 查询)会有所帮助,但恐怕我对它的了解不够。我正在考虑JOIN将表设置为自身,但我不知道如何SELECT只为A-1-2行而不是A-1-3行,例如,或者如何将NOW()值插入其中。有没有人有任何想法?

4

1 回答 1

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

于 2013-12-23T20:13:21.850 回答