2013-01-11 60 views
0

在顳DB平均instintanous值I具有時間數據庫,我想相對於平均數據到:`提取和PostgreSQL中

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

例如:

13 =觀察期12 :41至13:40。 預期結果:

該代碼應從(HH-1):41中減去HH:40的瞬時值。

樣本數據:

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 

此外DATE_TIME列是時間戳格式。 平均值不應該是移動平均線,我對簡單平均值感興趣。

提出的代碼由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 
+0

請儘量讓你的問題更清晰。第一行的格式不好(你在這裏忘了什麼?)。你的方程沒有幫助,因爲它不是一個真正的方程。你有什麼嘗試? (例如'SELECT avg(temperature)FROM foo WHERE datetime> = something AND datetime Tibo

回答

0
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

+0

@Hamed更新爲新的理解。 –

+0

t0和t1是否相同? –

+0

@Hamed是的。它被稱爲自連接。 –