Life is Short

查询每一个时间点数据同前一个时间点数据变化

有一个表里存放了每五分钟的一些统计数据, 希望通过一个SQL来查询每五分钟数据点同前一个数据点的变化.

采用查询同一张表两次的方式, 将两个结果集的结果的时间字段使用固定差值关系join在一起(比如我的数据中前一个数据与后一个数据时间相差5分钟),
然后将关联到的记录的数据做统计运算.

示例SQL如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
SELECT
*
FROM
(
SELECT
a.record_time time_a,
b.record_time time_b,
a.flow AS data_a,
b.flow AS data_b,
a.flow - b.flow AS data_diff,
round(
abs((a.flow - b.flow) / b.flow * 1.0),
2
) AS data_pct,
CASE
WHEN a.flow - b.flow > 0 THEN
'+'
WHEN a.flow - b.flow = 0 THEN
'='
WHEN a.flow - b.flow < 0 THEN
'-'
END AS dir
FROM
68286017800f083dffbd4d a,
68286017800f083dffbd4d b
WHERE
a.record_time < '2014-10-01 00:00:00'
AND a.record_time >= '2014-09-01 00:00:00'
AND a.record_time - b.record_time = 500
) a
WHERE
a.data_pct > 2
ORDER BY
data_pct