我有一个看起来像这样的日志表:
---------------------------------------------
| id | company | type | date_created |notes|
---------------------------------------------
| 1 | co1 | | 2016-06-30 | ... |
| 2 | co2 | ERROR | 2016-06-30 | ... |
| 3 | co1 | | 2016-06-29 | ... |
| 4 | co2 | | 2016-06-29 | ... |
我有以下内容选择每个实体的最新记录:
SELECT *
FROM import_data_log a
JOIN (SELECT company, max(date_created) date_created
FROM import_data_log
GROUP BY company) b
ON a.company = b.company AND a.date_created = b.date_created
给出了结果:
| 1 | co1 | | 2016-06-30 | ... |
| 2 | co2 | ERROR | 2016-06-30 | ... |
我需要添加一个条件,该条件不会选择 type = ERROR 的条目,并获得该公司的下一个最高日期,因此它会给出:
| 1 | co1 | | 2016-06-30 | ... |
| 4 | co2 | | 2016-06-29 | ... |
有什么想法吗?这可能是一件简单的事情,但对于我的生活,我似乎无法让它发挥作用。
UPDATE / FIX: 好吧经过大量的头发拉动后,对于遇到此问题的任何人来说,显然Postgres没有将null字段与任何东西进行比较,因此它完全忽略了type = null的所有行。
我修复它的方法就是这样,可能有一个更好的解决方案,但现在这个有效:
SELECT *
FROM import_data_log a
JOIN (SELECT company, max(date_created) date_created
FROM import_data_log
WHERE (type <> 'ERROR' OR type is null)
GROUP BY company) b
ON a.company = b.company AND a.date_created = b.date_created
答案 0 :(得分:0)
使用以下查询
SELECT id,company,type,max(date_created),notes
FROM import_data_log
WHERE type != 'ERROR'
GROUP BY company
答案 1 :(得分:0)
select distinct on (company) *
from import_data_log
where type is distinct from 'ERROR'
order by company, date_created desc
检查distinct on
和is [not] distinct from
:
当任一输入为空时,普通比较运算符产生null(表示“未知”),而不是true或false。例如,7 = NULL产生null,7&lt;&gt;空值。如果此行为不合适,请使用IS [NOT] DISTINCT FROM构造