mysql - 对具有多个主键的表进行子查询

标签 mysql sql where-clause

这是我的表格:

t_task_event
------------
f_date
f_client_id
f_task_id
f_event

每个任务可以为多个客户创建。每个事件都注册在此表中。正如你所看到的,没有 event_id,这很烦人,看看为什么:

我想获取最后一个事件为“错误”的所有任务。我认为我应该创建一个子查询来获取为客户注册的任务的所有最后事件。我是这样做的:

SELECT f_task_id, MAX( f_date ) AS f_date_max
FROM t_task_event
WHERE f_client_id =121

但是对于这个结果,我如何过滤以仅保留事件为“错误”的行?也许有一种方法可以从这对(f_task_id,f_date_max)创建一种 key 。有什么想法吗?

最佳答案

SELECT
    t.f_task_id
    ,t.f_client_id
    ,MAX(CASE WHEN t.f_event = 'Error' THEN t.f_date END) as MaxErrorDate
    ,MAX(t.f_date) As MaxEventDate
FROm
    t_task_event t
WHERE
    t.f_client_id = 121
GROUP BY
    t.f_task_id
    ,t.f_client_id
HAVING
    MAX(CASE WHEN t.f_event = 'Error' THEN t.f_date END) = MAX(t.f_date)

您应该能够比较条件聚合的结果以查找错误的最大日期,并与 MAX(date) 进行比较以仅获取“最新”记录是的事件错误。

关于mysql - 对具有多个主键的表进行子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38922539/

相关文章:

php - "bad"可以通过 img src 发生吗?

mysql - 计算每个类别组的余额

mysql - 总结 SQL 中四个不同表的列值

mysql - 如何在不使用 "SQL"中的 GROUP BY 的情况下解决此操作

mysql - mysql select where 子句日期

c# - Silverlight Web 应用程序 - 现场存储数据

mysql - 选择数据: paginating data from multiple tables with inconsistent dates

php - MySQL 5.5.47 表从 MyISAM 切换到 InnoDB

sql - IP 地址或 inet 类型的 Postgres "is not contained by"运算符

SQL如何有效地使用wheresomething!=something?