【发布时间】:2013-12-13 07:37:22
【问题描述】:
不确定问这个问题的正确词,所以我会分解它。
我有一张如下表:
date_time | a | b | c
最后 4 行:
15/10/2013 11:45:00 | null | 'timtim' | 'fred'
15/10/2013 13:00:00 | 'tune' | 'reco' | null
16/10/2013 12:00:00 | 'abc' | null | null
16/10/2013 13:00:00 | null | 'died' | null
我将如何获取最后一条记录,但其值忽略空值,而是从上一条记录中获取值。
在我提供的示例中,返回的行将是
16/10/2013 13:00:00 | 'abc' | 'died' | 'fred'
如您所见,如果一列的值为空,那么它将转到具有该列值并使用该值的最后一条记录。
这应该是可能的,我只是想不通。到目前为止,我只提出了:
select
last_value(a) over w a
from test
WINDOW w AS (
partition by a
ORDER BY ts asc
range between current row and unbounded following
);
但这仅适用于单个列...
【问题讨论】:
-
最后一个数据是插入的顺序还是最大日期时间?
-
最后一条数据是插入的顺序
-
表格中没有自然顺序。表是没有顺序的集合。只要您不在某处存储该信息,
"last data is the order that was inserted"就不会被定义。 CTID不可靠。它可以通过任何更新或恢复随时更改。
标签: sql postgresql null postgresql-9.2 window-functions