这是我的表:
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)。有什么想法吗?
答案 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)
进行比较,以便仅获取"最新的"记录是一个错误。