DB2 Max同一记录中列的时间戳记

时间:2016-05-19 14:46:08

标签: database view db2 left-join

我在DB2中有3个表A,B,C。他们有一对一的关系。 A是父表,B,C是子表。

每个表都有一个时间戳列,用于跟踪记录的更改。让我们说T1,T2,T3。

我想写一个视图,它获取A,B,C中每个键的所有记录(比如ID列),这样我就可以从所有三个表中获得一条逻辑记录。我知道我可以使用A和B的左外连接。连同所选列的逻辑记录,我也想要max(T1,T2,T3)。它不是跨行的列的最大时间戳,而是在同一逻辑记录中。

我不是在写查询,因此需要帮助。

2 个答案:

答案 0 :(得分:1)

假设每个表中每个ID有一条记录,那么:

select a.id, max(a.T1, b.T2, c.T3)
from tblA A
      join tblB B on b.id = a.id
      join tblC C on c.id = a.id

会给你你所要求的。 MAX()只返回给定集合中的最大值。这取决于你来自哪里。

如果不使用GROUP BYMAX()只有结果集中每一行的值集。

答案 1 :(得分:1)

GREATEST()VALUE()结合起来将NULL更改为任意低时间戳:

SELECT a.id, 
GREATEST(
  VALUE( T1, TIMESTAMP  '1970-01-01 00:00:00'),
  VALUE( T2, TIMESTAMP  '1970-01-01 00:00:00'),
  VALUE( T3, TIMESTAMP  '1970-01-01 00:00:00')
)     
FROM a
LEFT OUTER JOIN b ON a.id = b.id
LEFT OUTER JOIN c ON a.id = c.id