sql - 根据多列检查选择唯一记录

标签 sql postgresql

我有一个 postgres 表 fetches 包含下面的列

id  |  status  |  company_id  |  created_at
-------------------------------------------
10  |  success |  2773        |  2017-03-14
11  |  error   |  190         |  2017-03-02
12  |  error   |  303         |  2017-03-01
13  |  error   |  286         |  2017-02-16
14  |  error   |  2773        |  2016-12-05

我正在努力实现以下结果:

id  |  status  |  company_id  |  created_at
-------------------------------------------
11  |  error   |  190         |  2017-03-02
12  |  error   |  303         |  2017-03-01
13  |  error   |  286         |  2017-02-16

这是我试图应用的逻辑:

  1. 获取状态为错误的所有抓取。
  2. 如果结果包含任何company_id,最新的fetch(由created_at)是成功然后跳过它来自最终结果集。
  3. company_id = 2773 将被跳过,因为它的最新获取状态是 success

请告知我如何以 SQL 方式完成此操作。

最佳答案

尝试外连接:

with succ as (select company_id from fetches where status = 'success')
select fetches.* 
from fetches
left outer join succ on succ.company_id = fetches.company_id
where succ.company_id is null;

关于sql - 根据多列检查选择唯一记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42790699/

相关文章:

php - 我如何结合这两个查询来计算排名变化?

java - Oracle:意外强制 RR 年份格式

php - 单个 SQL 查询中的百分比

python - PostgreSQL COPY 命令问题

postgresql - 如何永久关闭postgres的自动提交

sql - 公式器具作为 SR

sql - 在 SQL-Server 中表示“某物”数据

mysql - 如何在MySql中返回具有相同列值的行

javascript - 为什么这仍然返回一个 promise ?

Postgresql - 编辑函数签名