我想在某些字段上聚合,并在其他字段上获取任何非空值。更确切地说,查询看起来像:
SELECT id, any_value(field1), any_value(field2) FROM mytable GROUP BY ID
列如下:
ID | field1 | field 2
-----------------
id | null | 3
id | 1 | null
id | null | null
id | 2 | 4
,输出可以像(id, 1,4)
或(id,2,4)
或......但不是(id, 1, null)
我无法在文档中找到any_value()
是否保证返回非空行(如果有的话)(尽管在我的实验中这样做)或者可能返回{{1}行即使存在一些非空值,也可以使用值。
null
执行我描述的任务吗?如果不是你建议做什么?
答案 0 :(得分:0)
这是一种猜测,但你试过了吗?
SELECT id, MIN(field1), MAX(field2)
FROM mytable
GROUP BY id;
这将忽略NULL
值从两列返回不同的值。
答案 1 :(得分:0)
您也可以使用分析功能。
以下是查询(SQL服务器):
Pointee
这将只返回一行,如果您要在任何列中查找最大值,则可以更改select id, field1, field2
from (select id, field1, field2, row_number()
over (partition by id order by isnull(field1, 'ZZZ') asc, isnull(field2, 'ZZZ') asc) as RNK from mytable) aa
where aa.RNK = 1;
子句中的顺序。