我希望从类似的表格中获取“最顶层”数据:
A B C | Id 1 2 3 | 1 4 5 | 1 6 | 1
A-C =列
1-6个值(未设置的字段为空)
数据按顺序依次按降序顺序降序
当我查询我想获取最新的书面数据时,在这个例子中,查询应该在一行中给我1,4和6:
a b c | Id 1 4 6 | 1
这是我尝试的但是我得到了正确的结果但是在不同的行中:
select * from
( select id, a from dataTable where id=(select max(dt.dataRow) from dataTable dt where dt.id = 1)) a_query
full outer join
( select id, b from dataTable where id=(select max(dt.dataRow) from dataTable dt where dt.id = 1)) b_query
on a_query.id=b_query.id
full outer join
( select id, c from dataTable where id=(select max(dt.dataRow) from dataTable dt where dt.id = 1)) c_query
on nvl(a_query.id, b_query.id)=c_query.id
优先的Oracle SQL
答案 0 :(得分:3)
这似乎过于复杂,只需获取每列的最大值(如果列的值为null,则使用COALESCE):
SELECT [id], MAX(COALESCE(a, 0)) AS a,
MAX(COALESCE(b, 0)) AS b,
MAX(COALESCE(c, 0)) AS c
FROM dataTable
GROUP BY [id]
答案 1 :(得分:0)
我可能会稍微简化一下我的例子。 A,B,C中的数据可能是非数字的,不会排序等等。
我发现last_value()http://www.oracle.com/technetwork/issue-archive/2006/06-nov/o66asktom-099001.html非常适合返回:
A B C | Id 1 2 3 | 1 1 4 5 | 1 1 4 6 | 1
让我操作。
然后查询看起来像这样:
select distinct
last_value(a ignore nulls) over (order by id) a,
last_value(b ignore nulls) over (order by id) b,
last_value(c ignore nulls) over (order by id) c
from datatable
where datatable.id IN (select id from datatable where datatable.id = 1)