我有事件状态表,表结构已经定义,我想把几行值变成一行。
当前表数据:
eventable:
EVENT EVENTNAME EVENTACTION STATUS TIMESTAMP
"Event1" "FootBall" "FootBall0" "started" "1554980085"
"Event1" "TableTennis" "TT0" "started" "1554980086"
"Event1" "FootBall" "FootBall0" "success" "1554980087"
"Event1" "Chess" "CHESS0" "success" "1554980095"
"Event1" "TableTennis" "TT0" "running" "1554980189"
"Event1" "FootBall" "FootBall1" "started" "1554980082"
我需要选择查询来显示数据,如下所示:
EVENT EVENTNAME EVENTACTION STATUS STARTTIME RUNNINGTIME ENDTIME
"Event1" "FootBall" "FootBall0" "success" 1554980085 NULL 1554980087
"Event1" "TableTennis" "TT0" "running" 1554980086 1554980189 NULL
"Event1" "Chess" "CHESS0" "success" 1554980098 NULL 1554980100
我必须展示qazxsw poi,qazxsw poi,qazxsw poi和最新的qazxsw poi以及EVENT
,EVENTNAME
和EVENTACTION
的时间戳,如果时间不存在那么应该设置STATUS
。
我已经使用SELECT查询大小写,但时间戳不会放在相关的行中。
started
任何线索。
你需要按事件聚合,然后获取running
表达式的success
:
NULL
请注意,仅通过SELECT AE.EVENT,
AE.EVENTNAME,
AE.EVENTACTION,
AE.STATUS,
(case WHEN AE.STATUS='started' THEN AE.timestamp END) as starttime,
(case WHEN AE.STATUS='running' THEN AE.timestamp END) as runningtime,
(case WHEN AE.STATUS in ('success','failed') THEN AE.timestamp END) as endtime
FROM agentEvents AE
ORDER by timestamp ASC
列进行排序是没有意义的,因为它在聚合后不再存在。所以,我按照起始时间排序。选择MAX
列也没有意义,所以我删除了它。