首先获取非空值,如果没有找到,然后获取空值-Postgres



我有2个表。table1有主记录。table2table1.id的从表,有多个表项。有些条目可能是空的。

首先,如果设置了table2.data并且日期没有过去,那么当我执行2个表的连接时,我必须获得该记录。如果没有table2.data不为空值且日期不是过去的记录,则从table2中获取table2.data IS NULL的最后更新记录。

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

Table1

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

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

如果我连接两个表,我的结果应该是这样的,当我传递user_id = 2

结果

id   user_id    data
1    2          NULL

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

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中是唯一的,或者需要额外的排序标准。

最新更新