在postgresql中提取并平均时态数据库中的instintanous值 [英] Extracting and Averaging instintanous values in temporal DB in postgresql

查看:159
本文介绍了在postgresql中提取并平均时态数据库中的instintanous值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个临时数据库,我想对这些数据进行平均:`

  HH =(HH-例如:

13 =观察期12:41至13:40。
预期结果:

代码应该从(HH-1):41中减去HH:40的瞬时值。



样本数据:

 温度日期 - 时间
1 -1.64 2007-09-29 00:01:09
2 -1.76 2007-09-29 00:03:09
3 -1.83 2007-09-29 00:05:09
4 -1.86 2007-09- 29 00:07:09
5 -1.94 2007-09-29 00:09:09
6 -1.87 2007-09-29 00:11:09
7 -1.87 2007-09 -29 00:13:09
8 -1.80 2007-09-29 00:15:09
9 -1.64 2007-09-29 00:17:09
10 -1.60 2007- 09-29 00:19:09
11 -1.90 2007-09-29 00:21:09
12 -2.08 2007-09-29 00:23:09
13 -1.94 2007 -09-29 00:25:09
14 -2.12 2007-09-29 00:27:09
15 -1.87 2007-09-29 00:29:09
16 -2.18 2007-09-29 00:31:09
17 -1.98 2007-09-29 00:33:09
18 -1.73 2007-09-29 00:35:09
19 - 1.84 2007-09-29 00:37:09
20 -2.04 2007-09-29 00:39:09
21 -1.86 2007-09-29 00:41:09
22 -1.94 20 07-09-29 00:43:09
23 -1.77 2007-09-29 00:45:09
24 -1.78 2007-09-29 00:47:09
25 - 1.50 2007-09-29 00:49:09
26 -1.46 2007-09-29 00:51:09
27 -1.72 2007-09-29 00:53:09
28 -1.67 2007-09-29 00:55:09
29 -1.56 2007-09-29 00:57:09
30 -1.69 2007-09-29 00:59:09
31 -1.97 2007-09-29 01:01:09
32 -1.79 2007-09-29 01:03:09
33 -1.79 2007-09-29 01:05:09
34 -1.84 2007-09-29 01:07:09
35 -1.91 2007-09-29 01:09:09
36 -1.87 2007-09-29 01:11:09
37 -1.98 2007-09-29 01:13:09
38 -1.83 2007-09-29 01:15:09
39 -1.88 2007-09-29 01:17:09
40 -1.88 2007-09-29 01:19:09
41 -1.78 2007-09-29 01:21:09
42 -1.78 2007-09-29 01:23:09
43 -1.66 2007-09-29 01:25:09
44 -1.70 2007-09-29 01:27:09
45 -1.46 2007-09-29 01:29: 09
46 -1.36 2007-09-29 01:31:09
47 -1.40 2007-09-29 01:33:09
48 -1.34 2007-09-29 01:35 :09
49 -1.34 200 7-09-29 01:37:09
50 -1.30 2007-09-29 01:39:09
51 -1.36 2007-09-29 01:41:09
52 - 1.40 2007-09-29 01:43:09
53 -1.43 2007-09-29 01:45:09
54 -1.38 2007-09-29 01:47:09
55 -1.40 2007-09-29 01:49:09
56 -1.42 2007-09-29 01:51:09
57 -1.47 2007-09-29 01:53:09
58 -1.66 2007-09-29 01:55:09
59 -1.84 2007-09-29 01:57:09
60 -1.92 2007-09-29 01:59:09
61 -1.88 2007-09-29 02:01:09
62 -2.11 2007-09-29 02:03:09
63 -1.91 2007-09-29 02:05:09
64 -2.04 2007-09-29 02:07:09
65 -1.94 2007-09-29 02:09:09
66 -1.92 2007-09-29 02:11:09
67 -1.80 2007-09-29 02:13:09
68 -1.74 2007-09-29 02:15:09
69 -1.74 2007-09-29 02:17:09
70 -1.76 2007-09-29 02:19:09
71 -1.74 2007-09-29 02:21:09
72 -1.80 2007-09-29 02:23: 09
73 -1.80 2007-09-29 02:25:09
74 -1.80 2007-09-29 02:27:09
75 -1.82 2007-09-29 02:29 :09
76 -1.90 2007 -09-29 02:31:09
77 -1.93 2007-09-29 02:33:09
78 -2.06 2007-09-29 02:35:09
79 -2.08 2007-09-29 02:37:09
80 -1.95 2007-09-29 02:39:09
81 -1.98 2007-09-29 02:41:09
82 - 2.32 2007-09-29 02:43:09
83 -1.86 2007-09-29 02:45:09
84 -1.97 2007-09-29 02:47:09
85 -1.64 2007-09-29 02:49:09
86 -2.00 2007-09-29 02:51:09
87 -1.48 2007-09-29 02:53:09
88 -1.74 2007-09-29 02:55:09
89 -1.85 2007-09-29 02:57:09
90 -1.82 2007-09-29 02:59:09
91 -1.82 2007-09-29 03:01:09
92 -1.92 2007-09-29 03:03:09
93 -1.80 2007-09-29 03:05:09
94 -1.54 2007-09-29 03:07:09
95 -1.36 2007-09-29 03:09:09
96 -1.50 2007-09-29 03:11:09
97 -1.59 2007-09-29 03:13:09
98 -1.60 2007-09-29 03:15:09
99 -1.58 2007-09-29 03:17:09
100 -1.81 2007-09-29 03:19:09
101 -2.16 2007-09-29 03:21:09
102 -1.97 2007-09-29 03:23: 09
103 -1.94 2007- 09-29 03:25:09
104 -2.29 2007-09-29 03:27:09
105 -2.46 2007-09-29 03:29:09
106 -2.42 2007 -09-29 03:31:09
107 -2.34 2007-09-29 03:33:09
108 -2.38 2007-09-29 03:35:09
109 -2.44 2007-09-29 03:37:09
110 -2.28 2007-09-29 03:39:09
111 -2.24 2007-09-29 03:41:09

此外,date_time列采用时间戳格式。
平均值不应该是移动平均值,我对简单平均值感兴趣。



Coloroaldo建议的代码:

 选择
提取(小时从n25.dt)为小时,
n25.dt为t1,n25.dt为t0,
round ((((n25.ambtemp + n25.ambtemp)/ 2):: numeric,2)作为平均

t0
内部连接
t1在
date_trunc( 'minute',t0.dt + interval'1小时 - 2分钟')
= date_trunc('minute',t1.dt)
其中extract(分钟来自t1.dt)= 41
order by t1.dt


解决方案

 选择
提取(小时从t1.dt)为小时,
t1.dt为t1,t0.dt为t0,
round(((t0.ambtemp + t1。 / 2):: numeric,2)作为平均

n25 t0
内部连接
n25 t1在
date_trunc('minute',t0.dt +间隔'1小时 - 2分钟')
= date_trunc('分钟',t1.dt)
(从t1.dt开始的分钟数)= 41
order by t1.dt

< a href =http://www.sqlfiddle.com/#!12/8e1e4/2 =nofollow> SQL小提琴


I have a temporal database and I wanted to average the data with respect to the: `

HH  = (HH-1):41 - HH:40

For example:

13 = observation period 12:41 to 13:40. Expected results:

The code should subtract the instantaneous value of HH:40 from (HH-1):41.

Sample data:

    temperature      date-time
1     -1.64 2007-09-29 00:01:09
2     -1.76 2007-09-29 00:03:09
3     -1.83 2007-09-29 00:05:09
4     -1.86 2007-09-29 00:07:09
5     -1.94 2007-09-29 00:09:09
6     -1.87 2007-09-29 00:11:09
7     -1.87 2007-09-29 00:13:09
8     -1.80 2007-09-29 00:15:09
9     -1.64 2007-09-29 00:17:09
10    -1.60 2007-09-29 00:19:09
11    -1.90 2007-09-29 00:21:09
12    -2.08 2007-09-29 00:23:09
13    -1.94 2007-09-29 00:25:09
14    -2.12 2007-09-29 00:27:09
15    -1.87 2007-09-29 00:29:09
16    -2.18 2007-09-29 00:31:09
17    -1.98 2007-09-29 00:33:09
18    -1.73 2007-09-29 00:35:09
19    -1.84 2007-09-29 00:37:09
20    -2.04 2007-09-29 00:39:09
21    -1.86 2007-09-29 00:41:09
22    -1.94 2007-09-29 00:43:09
23    -1.77 2007-09-29 00:45:09
24    -1.78 2007-09-29 00:47:09
25    -1.50 2007-09-29 00:49:09
26    -1.46 2007-09-29 00:51:09
27    -1.72 2007-09-29 00:53:09
28    -1.67 2007-09-29 00:55:09
29    -1.56 2007-09-29 00:57:09
30    -1.69 2007-09-29 00:59:09
31    -1.97 2007-09-29 01:01:09
32    -1.79 2007-09-29 01:03:09
33    -1.79 2007-09-29 01:05:09
34    -1.84 2007-09-29 01:07:09
35    -1.91 2007-09-29 01:09:09
36    -1.87 2007-09-29 01:11:09
37    -1.98 2007-09-29 01:13:09
38    -1.83 2007-09-29 01:15:09
39    -1.88 2007-09-29 01:17:09
40    -1.88 2007-09-29 01:19:09
41    -1.78 2007-09-29 01:21:09
42    -1.78 2007-09-29 01:23:09
43    -1.66 2007-09-29 01:25:09
44    -1.70 2007-09-29 01:27:09
45    -1.46 2007-09-29 01:29:09
46    -1.36 2007-09-29 01:31:09
47    -1.40 2007-09-29 01:33:09
48    -1.34 2007-09-29 01:35:09
49    -1.34 2007-09-29 01:37:09
50    -1.30 2007-09-29 01:39:09
51    -1.36 2007-09-29 01:41:09
52    -1.40 2007-09-29 01:43:09
53    -1.43 2007-09-29 01:45:09
54    -1.38 2007-09-29 01:47:09
55    -1.40 2007-09-29 01:49:09
56    -1.42 2007-09-29 01:51:09
57    -1.47 2007-09-29 01:53:09
58    -1.66 2007-09-29 01:55:09
59    -1.84 2007-09-29 01:57:09
60    -1.92 2007-09-29 01:59:09
61    -1.88 2007-09-29 02:01:09
62    -2.11 2007-09-29 02:03:09
63    -1.91 2007-09-29 02:05:09
64    -2.04 2007-09-29 02:07:09
65    -1.94 2007-09-29 02:09:09
66    -1.92 2007-09-29 02:11:09
67    -1.80 2007-09-29 02:13:09
68    -1.74 2007-09-29 02:15:09
69    -1.74 2007-09-29 02:17:09
70    -1.76 2007-09-29 02:19:09
71    -1.74 2007-09-29 02:21:09
72    -1.80 2007-09-29 02:23:09
73    -1.80 2007-09-29 02:25:09
74    -1.80 2007-09-29 02:27:09
75    -1.82 2007-09-29 02:29:09
76    -1.90 2007-09-29 02:31:09
77    -1.93 2007-09-29 02:33:09
78    -2.06 2007-09-29 02:35:09
79    -2.08 2007-09-29 02:37:09
80    -1.95 2007-09-29 02:39:09
81    -1.98 2007-09-29 02:41:09
82    -2.32 2007-09-29 02:43:09
83    -1.86 2007-09-29 02:45:09
84    -1.97 2007-09-29 02:47:09
85    -1.64 2007-09-29 02:49:09
86    -2.00 2007-09-29 02:51:09
87    -1.48 2007-09-29 02:53:09
88    -1.74 2007-09-29 02:55:09
89    -1.85 2007-09-29 02:57:09
90    -1.82 2007-09-29 02:59:09
91    -1.82 2007-09-29 03:01:09
92    -1.92 2007-09-29 03:03:09
93    -1.80 2007-09-29 03:05:09
94    -1.54 2007-09-29 03:07:09
95    -1.36 2007-09-29 03:09:09
96    -1.50 2007-09-29 03:11:09
97    -1.59 2007-09-29 03:13:09
98    -1.60 2007-09-29 03:15:09
99    -1.58 2007-09-29 03:17:09
100   -1.81 2007-09-29 03:19:09
101   -2.16 2007-09-29 03:21:09
102   -1.97 2007-09-29 03:23:09
103   -1.94 2007-09-29 03:25:09
104   -2.29 2007-09-29 03:27:09
105   -2.46 2007-09-29 03:29:09
106   -2.42 2007-09-29 03:31:09
107   -2.34 2007-09-29 03:33:09
108   -2.38 2007-09-29 03:35:09
109   -2.44 2007-09-29 03:37:09
110   -2.28 2007-09-29 03:39:09
111   -2.24 2007-09-29 03:41:09

Moreover date_time column is in timestamps format. Average should not be moving average and I am intrested in simple average.

The proposed code by Coloroaldo:

select
    extract(hour from n25.dt) as hour,
    n25.dt as t1, n25.dt as t0,
    round(((n25.ambtemp + n25.ambtemp) / 2)::numeric, 2) as average
from
     t0
    inner join
     t1 on
        date_trunc('minute', t0.dt + interval '1 hour - 2 minutes')
        = date_trunc('minute', t1.dt)
where extract(minute from t1.dt) = 41
order by t1.dt

解决方案

select
    extract(hour from t1.dt) as hour,
    t1.dt as t1, t0.dt as t0,
    round(((t0.ambtemp + t1.ambtemp) / 2)::numeric, 2) as average
from
    n25 t0
    inner join
    n25 t1 on
        date_trunc('minute', t0.dt + interval '1 hour - 2 minutes')
        = date_trunc('minute', t1.dt)
where extract(minute from t1.dt) = 41
order by t1.dt

SQL Fiddle

这篇关于在postgresql中提取并平均时态数据库中的instintanous值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆