2016-08-12 63 views
0

下面的表格是我的表:子查询与多个主键

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
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)比较得到的只是这里的“最新”的记录是一个错误的事件。

+0

谢谢!完美的作品! – cyanat