gpt4 book ai didi

postgresql - postgres 选择每个实体的最新记录,字段值除外

转载 作者:行者123 更新时间:2023-11-29 13:52:37 25 4
gpt4 key购买 nike

我有一个看起来像这样的日志表:

---------------------------------------------
| 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 | ... |

有什么想法吗?这可能很简单,但就我的生活而言,我似乎无法让它发挥作用。


更新/修复:好吧,在费尽周折之后,对于遇到此问题的任何人来说,显然 Postgres 不会将空字段与任何内容进行比较,因此它完全忽略了所有类型为 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

最佳答案

使用下面的查询

SELECT id,company,type,max(date_created),notes 
FROM import_data_log
WHERE type != 'ERROR'
GROUP BY company

关于postgresql - postgres 选择每个实体的最新记录,字段值除外,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38128650/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com