【发布时间】:2017-02-10 21:25:27
【问题描述】:
我有一个这样的 SQLAnywhere 表:
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。我需要解决这个问题,使用最早插入时间、最新修改时间和最新(按修改时间)non-null,将具有相同 id 的所有行汇总到新表中的单行中> data1 和 data2 的值(除非该 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'
我查看了非 equi-self-join 和窗口函数,但我无法让它们汇总各个列的最新非空值。有没有一种很酷的 SQL 方法可以在一个查询中执行此操作,还是我,哎呀,为它编写一个 Java 程序?
谢谢
【问题讨论】:
标签: sql group-by sybase sqlanywhere rollup