SQL 汇总最新的非空列值

SQL rollup latest non-null column values

我有一个 SQLAnywhere table 这样的:

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

开发者没有在id上做唯一索引,现在出现了一堆id相同但data1和data2的值不同的行,包括一些null。我需要解决这个问题,使用最早插入时间、最新修改时间和最新(按修改时间) 将具有相同 ID 的所有行汇总到新的 table 中的单行中data1 和 data2 的非 null 值(除非该 id 的所有行都为 null,在这种情况下汇总的行值将为 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 程序?

谢谢

我会用 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