table 上具有多个主键的子查询
Subquery on a table with multiple primary key
这是我的 table:
t_task_event
------------
f_date
f_client_id
f_task_id
f_event
可以为多个客户创建每个任务。每个事件都在此 table 中注册。可以看到,没有event_id,很烦人,看看为什么:
我想获取最后一个事件为 "Error" 的所有任务。我认为我应该创建一个子查询来获取为客户注册的所有任务的最后事件。我是这样做的:
SELECT f_task_id, MAX( f_date ) AS f_date_max
FROM t_task_event
WHERE f_client_id =121
但是有了这个结果,我该如何过滤以仅保留事件为 "Error" 的行?也许有办法从这对夫妇(f_task_id、f_date_max)中创建一种密钥。有什么想法吗?
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)
进行比较以仅获取 "latest" 记录为错误的事件。
这是我的 table:
t_task_event
------------
f_date
f_client_id
f_task_id
f_event
可以为多个客户创建每个任务。每个事件都在此 table 中注册。可以看到,没有event_id,很烦人,看看为什么:
我想获取最后一个事件为 "Error" 的所有任务。我认为我应该创建一个子查询来获取为客户注册的所有任务的最后事件。我是这样做的:
SELECT f_task_id, MAX( f_date ) AS f_date_max
FROM t_task_event
WHERE f_client_id =121
但是有了这个结果,我该如何过滤以仅保留事件为 "Error" 的行?也许有办法从这对夫妇(f_task_id、f_date_max)中创建一种密钥。有什么想法吗?
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)
进行比较以仅获取 "latest" 记录为错误的事件。