日均线的SQL写法

近期得到一个需求,是计算某调度流程一段时间的5日平均运行时长,并与当前运行时长一起展示,形成类似于股票行情的K线图。

SCHEDULE.RUNTIMEFLOWLOG表结构如下:

名称 数据类型 长度 备注
LOGID DECIMAL 20 ID,主键
FLOWID DECIMAL 11 流程ID
STATUS DECIMAL 11 流程状态
STARTTIME TIMESTAMP 10 开始时间
ENDTIME TIMESTAMP 10 结束时间
DATATIME VARCHAR 32 数据时间
FLOWTYPE DECIMAL 11  

两个计算字段:
cursec:当前运行时长,单位:秒
avgsec:5日平均运行时长,单位:秒
SQL如下(以DB2为例):

SELECT logid,
status,
datatime,
starttime,
MIDNIGHT_SECONDS (ENDTIME) - MIDNIGHT_SECONDS (STARTTIME) cursec,
AVG(MIDNIGHT_SECONDS (ENDTIME) - MIDNIGHT_SECONDS (STARTTIME))
OVER (PARTITION BY flowid, status
ORDER BY logid DESC
ROWS BETWEEN 1 FOLLOWING AND 5 FOLLOWING) avgsec
FROM SCHEDULE.RUNTIMEFLOWLOG
WHERE FLOWID = 471
ORDER BY logid DESC;

如为Oracle,只需要将cursec和avgsec计算秒数的部分做相应调整:
(CAST(ENDTIME AS DATE)-CAST(STARTTIME AS DATE))*3600*24
而分析函数的用法此处Oracle和DB2均通用,不需要任何调整。

以下是5日均线的效果图:5日均线图


Data Warehouse For Ever原创文章,转载请注明出处

  1. thank you about your post. really gud.

Leave a Comment


NOTE - You can use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>