2016-10-03 64 views
0

我有一個SQLAnywhere的表是這樣的:SQL彙總最新的非空列值

id  int   not null, 
inserted datetime not null, 
modified datetime not null, 
data1  varchar(20)  null 
data2  varchar(20)  null 

開發商沒有把一個唯一索引上的ID,現在有一幫行與同但行之間的data1和data2的值不同,包括一些空值。我需要解決這個問題,使用最早插入時間,最新修改時間和最新(修改時間)將具有相同ID的所有行滾動到新表中的單個行中。非null data1的值和data2(除非該id的所有行都爲null,在這種情況下,彙總的行值將爲空)。我不能只用最後一行;我需要每個列的最新非空值。

所以三行這樣的:

1, '2016-01-01', '2016-01-02', 'first', null 
1, '2016-01-05', '2016-01-07', null, 'second' 
1, '2016-01-10', '2016-01-12', 'third', null 

...會捲起:

1, '2016-01-01', 2016-01-12', 'third', 'second' 

我看不相等自聯接和窗口功能,但我無法讓他們爲單個列彙總最新的非空值。在一個查詢中有沒有一種很酷的SQL方法來做到這一點,或者我是否爲它編寫了一個Java程序?

感謝

回答

0

我會用LAST_VALUE

select 
    id 
    ,min(inserted) over (partition by id) 
    ,max(modified) over (partition by id) 
    ,last_value(data1 ignore nulls) over (partition by id order by modified) 
    ,last_value(data2 ignore nulls) over (partition by id order by modified) 
from 
    table_a 
+0

完美!謝謝傑里米。 – alacrity