首先获取非空值,如果未找到,则获取空值-Postgres

时间:2014-03-17 20:59:04

标签: sql postgresql

我有2张桌子。 table1有主要记录。 table2是具有table1.id的多个条目的从属表。有些条目可能是空白的。

首先如果设置table2.data并且日期没有过去,那么当我连接2个表时,我必须得到该记录。如果没有table2.data没有空值且日期未过去的记录,则从table2获取上次更新的记录,table2.data IS NULL

我需要一个查询来获取NOT NULL或NULL记录。

表1

id  name   date
1   Abc    2013-12-09
2   Test   2014-12-09
3   Xyz    2012-02-10

表2

id  user_id  data
1   1        test
2   1        NULL
3   2        NULL
4   3        blah blah.....

如果我加入2个表格,我的结果应该是,当我通过user_id = 1并将日期作为今天的日期进行比较

结果

id   user_id    data
1    1          NULL

如果我加入2个表,我的结果应该是,当我通过user_id = 2

结果

id   user_id    data
1    2          NULL

1 个答案:

答案 0 :(得分:1)

这是一个有根据的猜测。你的描述太模糊了。

SELECT DISTINCT ON (t2.user_id)
       *
FROM   table1 t1
JOIN   table2 t2 ON t2.user_id = t1.id
WHERE  t1.date > current_date
ORDER  BY t2.user_id, t2.data DESC NULLS LAST

假设:

  • table2.user_id对应table1.id
  • 您只需要table1.date是未来日期的行。
  • (user_id, data)table2中是唯一的,或者您需要其他排序条件。