【发布时间】:2014-08-09 12:32:18
【问题描述】:
我正在创建一个表,该表对每个逻辑行都有一系列修订,并使用 NULL 值来指示特定单元格与上一个修订具有相同的值。例如:
id | logical_id | revision | x | y | z | other
---+------------+----------+---+---+---+--------
1 | 1 | 1 | 1 | 2 | 5 | blue
2 | 2 | 1 | 3 | 5 | 9 | red
3 | 1 | 2 | 9 | | |
4 | 2 | 2 | | 7 | | orange
5 | 1 | 3 | | 6 | |
6 3 | 1 | 0 | 0 | 0 | white
我需要一个查询,它采用每个logical_id 并为修订后的每个字段(“常规字段”)构建一个包含最新条目的行,在本例中为x、y、z 和@987654326 @。此类字段的数量是任意的,尽管需要根据这些字段的实际情况来修改查询是完全可以接受的(我希望如此)。
所以对于上表,输出将是:
logical_id | x | y | z | other
-----------+---+---+---+--------
1 | 9 | 6 | 5 | blue
2 | 3 | 7 | 9 | orange
3 | 0 | 0 | 0 | white
我发现了这个问题“Database: Select last non-null entries”,这似乎与我的问题几乎完全相同,但问题是关于 Postgresql,并且给出的解决方案是使用 SQLite 中不可用的语言结构(FIRST_VALUE, PARTITION BY?),似乎只能回答部分问题(例如,只找到单个逻辑 id 的结果),或者当我在 SQLite 中尝试它们时它们根本不起作用。
另外,如果可能的话,我还希望能够通过将所有“常规字段”设置为 NULL 来将 logical_id 标记为已删除。
【问题讨论】:
-
输出真的应该有
id和revision列吗?他们的价值观应该是什么? -
@CL。你是对的,输出中不需要这些列。我已经更新了问题。