具有多个主键

时间:2016-08-12 16:22:16

标签: mysql sql where 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)。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

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)进行比较,以便仅获取"最新的"记录是一个错误。