使用 first_value()
first_value(col)可以与一起使用
and OVER (ORDER BY CASE WHEN col IS NOT NULL THENsortcol ELSE maxvalue END)。
ELSE maxvalue是必需的,因为SQL Server首先对null进行排序)
CREATE TABLE foo(a int, b int, c int, sortCol int);INSERT INTO foo VALUES (null, 4, 8, 1), (1, null, 0, 2), (5, 7, null, 3);
现在,您可以看到我们必须执行什么操作来强制null在
sortcol。之后排序。为此,
desc您必须确保它们具有负值。
SELECt TOP(1) first_value(a) OVER (ORDER BY CASE WHEN a IS NOT NULL THEN sortcol ELSE 2^31-1 END) AS a, first_value(b) OVER (ORDER BY CASE WHEN b IS NOT NULL THEN sortcol ELSE 2^31-1 END) AS b, first_value(c) OVER (ORDER BY CASE WHEN c IS NOT NULL THEN sortcol ELSE 2^31-1 END) AS cFROM foo;
PostgreSQL的
PostgreSQL稍微简单一些,
CREATE TABLE foo(a,b,c,sortCol)AS VALUES (null, 4, 8, 1), (1, null, 0, 2), (5, 7, null, 3);SELECt first_value(a) OVER (ORDER BY CASE WHEN a IS NOT NULL THEN sortcol END) AS a, first_value(b) OVER (ORDER BY CASE WHEN b IS NOT NULL THEN sortcol END) AS b, first_value(c) OVER (ORDER BY CASE WHEN c IS NOT NULL THEN sortcol END) AS cFROM fooFETCH FIRST ROW ONLY;
我相信,当RDBMS开始采用时,所有这些都将消失
IGNORE NULLS。那只会是
first_value(a IGNORE NULLS)。



