SQLITE将多行值转换为列

问题描述 投票:0回答:1

我有事件状态表,表结构已经定义,我想把几行值变成一行。

当前表数据:

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以及EVENTEVENTNAMEEVENTACTION的时间戳,如果时间不存在那么应该设置STATUS

我已经使用SELECT查询大小写,但时间戳不会放在相关的行中。

started

任何线索。

sqlite case
1个回答
0
投票

你需要按事件聚合,然后获取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列也没有意义,所以我删除了它。

© www.soinside.com 2019 - 2024. All rights reserved.