@golemio/waze-tt 1.1.1-dev.770900483 → 1.1.1-dev.773639991
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var dbm;
|
|
4
|
+
var type;
|
|
5
|
+
var seed;
|
|
6
|
+
var fs = require('fs');
|
|
7
|
+
var path = require('path');
|
|
8
|
+
var Promise;
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* We receive the dbmigrate dependency from dbmigrate initially.
|
|
12
|
+
* This enables us to not have to rely on NODE_PATH.
|
|
13
|
+
*/
|
|
14
|
+
exports.setup = function(options, seedLink) {
|
|
15
|
+
dbm = options.dbmigrate;
|
|
16
|
+
type = dbm.dataType;
|
|
17
|
+
seed = seedLink;
|
|
18
|
+
Promise = options.Promise;
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
exports.up = function(db) {
|
|
22
|
+
var filePath = path.join(__dirname, 'sqls', '20230209091614-pp20230209-up.sql');
|
|
23
|
+
return new Promise( function( resolve, reject ) {
|
|
24
|
+
fs.readFile(filePath, {encoding: 'utf-8'}, function(err,data){
|
|
25
|
+
if (err) return reject(err);
|
|
26
|
+
console.log('received data: ' + data);
|
|
27
|
+
|
|
28
|
+
resolve(data);
|
|
29
|
+
});
|
|
30
|
+
})
|
|
31
|
+
.then(function(data) {
|
|
32
|
+
return db.runSql(data);
|
|
33
|
+
});
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
exports.down = function(db) {
|
|
37
|
+
var filePath = path.join(__dirname, 'sqls', '20230209091614-pp20230209-down.sql');
|
|
38
|
+
return new Promise( function( resolve, reject ) {
|
|
39
|
+
fs.readFile(filePath, {encoding: 'utf-8'}, function(err,data){
|
|
40
|
+
if (err) return reject(err);
|
|
41
|
+
console.log('received data: ' + data);
|
|
42
|
+
|
|
43
|
+
resolve(data);
|
|
44
|
+
});
|
|
45
|
+
})
|
|
46
|
+
.then(function(data) {
|
|
47
|
+
return db.runSql(data);
|
|
48
|
+
});
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
exports._meta = {
|
|
52
|
+
"version": 1
|
|
53
|
+
};
|
|
@@ -0,0 +1,362 @@
|
|
|
1
|
+
CREATE OR REPLACE PROCEDURE analytic.update_waze()
|
|
2
|
+
LANGUAGE plpgsql
|
|
3
|
+
AS $procedure$
|
|
4
|
+
|
|
5
|
+
declare
|
|
6
|
+
lastupdatetimestamp timestamptz;
|
|
7
|
+
lastupdateunix bigint;
|
|
8
|
+
begin
|
|
9
|
+
select
|
|
10
|
+
case
|
|
11
|
+
when start_day is not null
|
|
12
|
+
then start_day
|
|
13
|
+
else '2021-01-01'
|
|
14
|
+
end as start_day_from into lastupdatetimestamp
|
|
15
|
+
from (select max(date)-interval '1 days' start_day from analytic.waze_route_travel_times_agg) wazemax;
|
|
16
|
+
|
|
17
|
+
lastupdateunix := extract ('epoch' from lastupdatetimestamp) * 1000;
|
|
18
|
+
-- inserting data is incremental, since the last timestamp already in the table
|
|
19
|
+
insert into analytic.waze_route_travel_times_agg
|
|
20
|
+
SELECT ts.route_id,
|
|
21
|
+
ts.year,
|
|
22
|
+
ts.month,
|
|
23
|
+
ts.day,
|
|
24
|
+
ts.dow,
|
|
25
|
+
ts.hour,
|
|
26
|
+
ts.quarter,
|
|
27
|
+
ts.hour + (ts.quarter::numeric / 60::numeric)::double precision AS hour_quarter,
|
|
28
|
+
((((((((ts.year || '-'::text) || ts.month) || '-'::text) || ts.day) || ' '::text) || ts.hour) || ':'::text) || ts.quarter)::timestamp without time zone AS date,
|
|
29
|
+
avg(ts.travel_time)::integer AS travel_time
|
|
30
|
+
FROM ( SELECT raw.route_id,
|
|
31
|
+
raw.update_time,
|
|
32
|
+
raw.travel_time,
|
|
33
|
+
date_part('year'::text, raw.update_time) AS year,
|
|
34
|
+
date_part('month'::text, raw.update_time) AS month,
|
|
35
|
+
date_part('day'::text, raw.update_time) AS day,
|
|
36
|
+
date_part('dow'::text, raw.update_time) AS dow,
|
|
37
|
+
date_part('hour'::text, raw.update_time) AS hour,
|
|
38
|
+
date_part('minute'::text, raw.update_time) AS minute,
|
|
39
|
+
date_part('minute'::text, raw.update_time)::integer / 15 * 15 AS quarter
|
|
40
|
+
FROM ( SELECT wazett_route_lives.route_id,
|
|
41
|
+
timezone('Europe/Prague'::text, to_timestamp((wazett_route_lives.update_time / 1000)::double precision)::timestamp without time zone) AS update_time,
|
|
42
|
+
wazett_route_lives."time" AS travel_time
|
|
43
|
+
FROM wazett_route_lives
|
|
44
|
+
JOIN analytic.waze_dashboard_route_name wdrn ON wdrn.route_id = wazett_route_lives.route_id
|
|
45
|
+
where wazett_route_lives.update_time > lastupdateunix -- this is the time condition for the increment
|
|
46
|
+
) raw
|
|
47
|
+
) ts
|
|
48
|
+
WHERE ts.year > 2000::double precision
|
|
49
|
+
GROUP BY ts.route_id, ts.year, ts.month, ts.day, ts.dow, ts.hour, ts.quarter
|
|
50
|
+
ON CONFLICT (route_id, year, month, day, dow, hour, quarter, hour_quarter)
|
|
51
|
+
DO update
|
|
52
|
+
SET
|
|
53
|
+
date = EXCLUDED.date,
|
|
54
|
+
travel_time = EXCLUDED.travel_time
|
|
55
|
+
;
|
|
56
|
+
end;
|
|
57
|
+
$procedure$
|
|
58
|
+
;
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
CREATE OR REPLACE PROCEDURE analytic.update_mala_strana()
|
|
62
|
+
LANGUAGE plpgsql
|
|
63
|
+
AS $procedure$
|
|
64
|
+
declare
|
|
65
|
+
lastupdatetimestamp timestamptz;
|
|
66
|
+
lastupdateunix bigint;
|
|
67
|
+
begin
|
|
68
|
+
begin
|
|
69
|
+
select
|
|
70
|
+
case
|
|
71
|
+
when start_day is not null
|
|
72
|
+
then start_day
|
|
73
|
+
else '2022-01-01'
|
|
74
|
+
end as start_day_from into lastupdatetimestamp
|
|
75
|
+
from (select max(datum)-interval '1 days' start_day from analytic.mala_strana_route_hour_core) barandemax;
|
|
76
|
+
|
|
77
|
+
lastupdateunix := extract ('epoch' from lastupdatetimestamp) * 1000;
|
|
78
|
+
|
|
79
|
+
-- dopoctu hodinovou agregaci (podobné v_mala_strana_route_hour_core) POT5EBUJEME TAKTO?
|
|
80
|
+
insert into analytic.mala_strana_route_hour_core
|
|
81
|
+
SELECT
|
|
82
|
+
wdrn.name,
|
|
83
|
+
rl.ts::date AS datum,
|
|
84
|
+
date_part('hour'::text, rl.ts) AS hodina,
|
|
85
|
+
(to_char(date_part('hour'::text, rl.ts), '09'::text) || ' -'::text) || to_char(date_part('hour'::text, rl.ts) + 1::double precision, '09'::text) AS cas_interval,
|
|
86
|
+
avg_time,
|
|
87
|
+
avg_speed
|
|
88
|
+
FROM (
|
|
89
|
+
select
|
|
90
|
+
route_id
|
|
91
|
+
-- timezone('Europe/Prague'::text, to_timestamp((update_time / 1000)::double precision)::timestamp without time zone)
|
|
92
|
+
,date_trunc('hour', to_timestamp((update_time / 1000))::timestamp) as ts
|
|
93
|
+
,round(avg(time), 2) AS avg_time
|
|
94
|
+
,round(avg(rl.length * 1000 / (nullif(rl."time", 0) * 360)), 2) AS avg_speed
|
|
95
|
+
from wazett.wazett_route_lives rl
|
|
96
|
+
where
|
|
97
|
+
-- route_id = 22706 and
|
|
98
|
+
rl.update_time > lastupdateunix and
|
|
99
|
+
rl.length > 0
|
|
100
|
+
group by 1,2) rl
|
|
101
|
+
JOIN analytic.waze_dashboard_route_name wdrn ON wdrn.route_id = rl.route_id
|
|
102
|
+
ON CONFLICT (name,datum,hodina,cas_interval)
|
|
103
|
+
DO update
|
|
104
|
+
SET avg_time = EXCLUDED.avg_time,
|
|
105
|
+
avg_speed = EXCLUDED.avg_speed
|
|
106
|
+
;
|
|
107
|
+
|
|
108
|
+
insert into analytic.mala_strana_data_all
|
|
109
|
+
WITH
|
|
110
|
+
v_barrande_route_hour as (
|
|
111
|
+
SELECT p.name,
|
|
112
|
+
p.datum,
|
|
113
|
+
p.hodina,
|
|
114
|
+
p.cas_interval,
|
|
115
|
+
p.avg_time,
|
|
116
|
+
p.avg_speed,
|
|
117
|
+
n.avg_time AS normal_avg_time,
|
|
118
|
+
n.avg_speed AS normal_avg_speed
|
|
119
|
+
FROM analytic.mala_strana_route_hour_core p
|
|
120
|
+
LEFT JOIN analytic.mv_mala_strana_normal n ON n.name = p.name AND p.hodina = n.hodina
|
|
121
|
+
where datum > lastupdatetimestamp
|
|
122
|
+
),
|
|
123
|
+
-- konec v_barrande_route_hour
|
|
124
|
+
v_barrande_union_time_interval as (
|
|
125
|
+
WITH hodiny AS (
|
|
126
|
+
SELECT brh.name,
|
|
127
|
+
brh.datum,
|
|
128
|
+
brh.hodina,
|
|
129
|
+
brh.cas_interval,
|
|
130
|
+
brh.avg_time,
|
|
131
|
+
brh.avg_speed,
|
|
132
|
+
brh.normal_avg_time,
|
|
133
|
+
brh.normal_avg_speed
|
|
134
|
+
FROM v_barrande_route_hour brh
|
|
135
|
+
WHERE brh.datum < CURRENT_DATE OR brh.hodina < date_part('hour'::text, now())
|
|
136
|
+
), den AS (
|
|
137
|
+
SELECT hodiny.name,
|
|
138
|
+
hodiny.datum,
|
|
139
|
+
'0 - 24h'::text AS cas_interval,
|
|
140
|
+
round(avg(hodiny.avg_time), 2) AS avg_time,
|
|
141
|
+
round(avg(hodiny.avg_speed), 2) AS avg_speed,
|
|
142
|
+
round(avg(hodiny.normal_avg_time), 2) AS normal_avg_time,
|
|
143
|
+
round(avg(hodiny.normal_avg_speed), 2) AS normal_avg_speed
|
|
144
|
+
FROM hodiny
|
|
145
|
+
WHERE hodiny.datum < CURRENT_DATE
|
|
146
|
+
GROUP BY hodiny.name, hodiny.datum
|
|
147
|
+
), h15_18 AS (
|
|
148
|
+
SELECT hodiny.name,
|
|
149
|
+
hodiny.datum,
|
|
150
|
+
'15 -18'::text AS cas_interval,
|
|
151
|
+
round(avg(hodiny.avg_time), 2) AS avg_time,
|
|
152
|
+
round(avg(hodiny.avg_speed), 2) AS avg_speed,
|
|
153
|
+
round(avg(hodiny.normal_avg_time), 2) AS normal_avg_time,
|
|
154
|
+
round(avg(hodiny.normal_avg_speed), 2) AS normal_avg_speed
|
|
155
|
+
FROM hodiny
|
|
156
|
+
WHERE hodiny.hodina >= 15::double precision AND hodiny.hodina <= 17::double precision AND (hodiny.datum < CURRENT_DATE OR hodiny.hodina > 17::double precision)
|
|
157
|
+
GROUP BY hodiny.name, hodiny.datum
|
|
158
|
+
), h22_6 AS (
|
|
159
|
+
SELECT hodiny.name,
|
|
160
|
+
hodiny.datum,
|
|
161
|
+
'22 - 06'::text AS cas_interval,
|
|
162
|
+
round(avg(hodiny.avg_time), 2) AS avg_time,
|
|
163
|
+
round(avg(hodiny.avg_speed), 2) AS avg_speed,
|
|
164
|
+
round(avg(hodiny.normal_avg_time), 2) AS normal_avg_time,
|
|
165
|
+
round(avg(hodiny.normal_avg_speed), 2) AS normal_avg_speed
|
|
166
|
+
FROM hodiny
|
|
167
|
+
WHERE NOT (hodiny.hodina >= 6::double precision AND hodiny.hodina <= 21::double precision) AND hodiny.datum < CURRENT_DATE
|
|
168
|
+
GROUP BY hodiny.name, hodiny.datum
|
|
169
|
+
), h6_22 AS (
|
|
170
|
+
SELECT hodiny.name,
|
|
171
|
+
hodiny.datum,
|
|
172
|
+
'06 - 22'::text AS cas_interval,
|
|
173
|
+
round(avg(hodiny.avg_time), 2) AS avg_time,
|
|
174
|
+
round(avg(hodiny.avg_speed), 2) AS avg_speed,
|
|
175
|
+
round(avg(hodiny.normal_avg_time), 2) AS normal_avg_time,
|
|
176
|
+
round(avg(hodiny.normal_avg_speed), 2) AS normal_avg_speed
|
|
177
|
+
FROM hodiny
|
|
178
|
+
WHERE hodiny.hodina >= 6::double precision AND hodiny.hodina <= 21::double precision AND (hodiny.datum < CURRENT_DATE OR hodiny.hodina > 21::double precision)
|
|
179
|
+
GROUP BY hodiny.name, hodiny.datum
|
|
180
|
+
), h7_10 AS (
|
|
181
|
+
SELECT hodiny.name,
|
|
182
|
+
hodiny.datum,
|
|
183
|
+
'07 - 10'::text AS cas_interval,
|
|
184
|
+
round(avg(hodiny.avg_time), 2) AS avg_time,
|
|
185
|
+
round(avg(hodiny.avg_speed), 2) AS avg_speed,
|
|
186
|
+
round(avg(hodiny.normal_avg_time), 2) AS normal_avg_time,
|
|
187
|
+
round(avg(hodiny.normal_avg_speed), 2) AS normal_avg_speed
|
|
188
|
+
FROM hodiny
|
|
189
|
+
WHERE hodiny.hodina >= 7::double precision AND hodiny.hodina <= 9::double precision AND (hodiny.datum < CURRENT_DATE OR hodiny.hodina > 10::double precision)
|
|
190
|
+
GROUP BY hodiny.name, hodiny.datum
|
|
191
|
+
), h7_11_15_19 AS (
|
|
192
|
+
SELECT hodiny.name,
|
|
193
|
+
hodiny.datum,
|
|
194
|
+
'07 - 11, 15 - 19'::text AS cas_interval,
|
|
195
|
+
round(avg(hodiny.avg_time), 2) AS avg_time,
|
|
196
|
+
round(avg(hodiny.avg_speed), 2) AS avg_speed,
|
|
197
|
+
round(avg(hodiny.normal_avg_time), 2) AS normal_avg_time,
|
|
198
|
+
round(avg(hodiny.normal_avg_speed), 2) AS normal_avg_speed
|
|
199
|
+
FROM hodiny
|
|
200
|
+
WHERE (hodiny.hodina >= 7::double precision AND hodiny.hodina <= 10::double precision OR hodiny.hodina >= 15::double precision AND hodiny.hodina <= 18::double precision) AND (hodiny.datum < CURRENT_DATE OR hodiny.hodina > 18::double precision)
|
|
201
|
+
GROUP BY hodiny.name, hodiny.datum
|
|
202
|
+
)
|
|
203
|
+
SELECT hodiny.name,
|
|
204
|
+
hodiny.datum,
|
|
205
|
+
hodiny.cas_interval,
|
|
206
|
+
hodiny.avg_time,
|
|
207
|
+
hodiny.avg_speed,
|
|
208
|
+
hodiny.normal_avg_time,
|
|
209
|
+
hodiny.normal_avg_speed
|
|
210
|
+
FROM hodiny
|
|
211
|
+
UNION ALL
|
|
212
|
+
SELECT den.name,
|
|
213
|
+
den.datum,
|
|
214
|
+
den.cas_interval,
|
|
215
|
+
den.avg_time,
|
|
216
|
+
den.avg_speed,
|
|
217
|
+
den.normal_avg_time,
|
|
218
|
+
den.normal_avg_speed
|
|
219
|
+
FROM den
|
|
220
|
+
UNION ALL
|
|
221
|
+
SELECT h15_18.name,
|
|
222
|
+
h15_18.datum,
|
|
223
|
+
h15_18.cas_interval,
|
|
224
|
+
h15_18.avg_time,
|
|
225
|
+
h15_18.avg_speed,
|
|
226
|
+
h15_18.normal_avg_time,
|
|
227
|
+
h15_18.normal_avg_speed
|
|
228
|
+
FROM h15_18
|
|
229
|
+
UNION ALL
|
|
230
|
+
SELECT h22_6.name,
|
|
231
|
+
h22_6.datum,
|
|
232
|
+
h22_6.cas_interval,
|
|
233
|
+
h22_6.avg_time,
|
|
234
|
+
h22_6.avg_speed,
|
|
235
|
+
h22_6.normal_avg_time,
|
|
236
|
+
h22_6.normal_avg_speed
|
|
237
|
+
FROM h22_6
|
|
238
|
+
UNION ALL
|
|
239
|
+
SELECT h6_22.name,
|
|
240
|
+
h6_22.datum,
|
|
241
|
+
h6_22.cas_interval,
|
|
242
|
+
h6_22.avg_time,
|
|
243
|
+
h6_22.avg_speed,
|
|
244
|
+
h6_22.normal_avg_time,
|
|
245
|
+
h6_22.normal_avg_speed
|
|
246
|
+
FROM h6_22
|
|
247
|
+
UNION ALL
|
|
248
|
+
SELECT h7_10.name,
|
|
249
|
+
h7_10.datum,
|
|
250
|
+
h7_10.cas_interval,
|
|
251
|
+
h7_10.avg_time,
|
|
252
|
+
h7_10.avg_speed,
|
|
253
|
+
h7_10.normal_avg_time,
|
|
254
|
+
h7_10.normal_avg_speed
|
|
255
|
+
FROM h7_10
|
|
256
|
+
UNION ALL
|
|
257
|
+
SELECT h7_11_15_19.name,
|
|
258
|
+
h7_11_15_19.datum,
|
|
259
|
+
h7_11_15_19.cas_interval,
|
|
260
|
+
h7_11_15_19.avg_time,
|
|
261
|
+
h7_11_15_19.avg_speed,
|
|
262
|
+
h7_11_15_19.normal_avg_time,
|
|
263
|
+
h7_11_15_19.normal_avg_speed
|
|
264
|
+
FROM h7_11_15_19
|
|
265
|
+
),
|
|
266
|
+
-----------------------
|
|
267
|
+
data1 AS (
|
|
268
|
+
SELECT
|
|
269
|
+
trasy.name,
|
|
270
|
+
trasy.name_trasa,
|
|
271
|
+
trasy.name_usek,
|
|
272
|
+
CASE
|
|
273
|
+
WHEN trasy.is_opacny_smer THEN 'Zpět'::text
|
|
274
|
+
ELSE 'Tam'::text
|
|
275
|
+
END AS smer,
|
|
276
|
+
vbu.datum,
|
|
277
|
+
vbu.cas_interval,
|
|
278
|
+
vbu.avg_time,
|
|
279
|
+
vbu.avg_speed,
|
|
280
|
+
vbu.normal_avg_time,
|
|
281
|
+
vbu.normal_avg_speed
|
|
282
|
+
FROM v_barrande_union_time_interval vbu
|
|
283
|
+
JOIN pavelp.v_mala_strana_route trasy ON trasy.name = vbu.name
|
|
284
|
+
),
|
|
285
|
+
data2 AS (
|
|
286
|
+
SELECT
|
|
287
|
+
data1.name_trasa,
|
|
288
|
+
data1.name_usek,
|
|
289
|
+
'Oba'::text AS smer,
|
|
290
|
+
data1.datum,
|
|
291
|
+
data1.cas_interval,
|
|
292
|
+
sum(data1.avg_time) AS avg_time,
|
|
293
|
+
avg(data1.avg_speed) AS avg_speed,
|
|
294
|
+
sum(data1.normal_avg_time) AS normal_avg_time,
|
|
295
|
+
avg(data1.normal_avg_speed) AS normal_avg_speed
|
|
296
|
+
FROM data1
|
|
297
|
+
GROUP BY data1.name_trasa, data1.name_usek, 'Oba'::text, data1.datum, data1.cas_interval
|
|
298
|
+
)
|
|
299
|
+
SELECT data1.name,
|
|
300
|
+
data1.name_trasa,
|
|
301
|
+
data1.name_usek,
|
|
302
|
+
data1.smer,
|
|
303
|
+
data1.datum,
|
|
304
|
+
data1.cas_interval,
|
|
305
|
+
data1.avg_time,
|
|
306
|
+
data1.avg_speed,
|
|
307
|
+
data1.normal_avg_time,
|
|
308
|
+
data1.normal_avg_speed
|
|
309
|
+
FROM data1
|
|
310
|
+
UNION
|
|
311
|
+
SELECT vbt.name,
|
|
312
|
+
data2.name_trasa,
|
|
313
|
+
data2.name_usek,
|
|
314
|
+
data2.smer,
|
|
315
|
+
data2.datum,
|
|
316
|
+
data2.cas_interval,
|
|
317
|
+
data2.avg_time,
|
|
318
|
+
data2.avg_speed,
|
|
319
|
+
data2.normal_avg_time,
|
|
320
|
+
data2.normal_avg_speed
|
|
321
|
+
FROM data2
|
|
322
|
+
JOIN analytic.v_mala_strana_route vbt ON vbt.name_trasa = data2.name_trasa AND vbt.name_usek = data2.name_usek AND NOT vbt.is_opacny_smer
|
|
323
|
+
on conflict (name,name_trasa,name_usek,smer,datum,cas_interval)
|
|
324
|
+
do update
|
|
325
|
+
SET avg_time = EXCLUDED.avg_time,
|
|
326
|
+
avg_speed = EXCLUDED.avg_speed,
|
|
327
|
+
normal_avg_time = EXCLUDED.normal_avg_time,
|
|
328
|
+
normal_avg_speed = EXCLUDED.normal_avg_speed;
|
|
329
|
+
end;
|
|
330
|
+
end;
|
|
331
|
+
$procedure$
|
|
332
|
+
;
|
|
333
|
+
|
|
334
|
+
-- analytic.mv_mala_strana_normal source
|
|
335
|
+
DROP MATERIALIZED VIEW analytic.mv_mala_strana_normal;
|
|
336
|
+
CREATE MATERIALIZED VIEW analytic.mv_mala_strana_normal
|
|
337
|
+
TABLESPACE pg_default
|
|
338
|
+
AS SELECT vtbh.name,
|
|
339
|
+
vtbh.hodina,
|
|
340
|
+
round(avg(vtbh.avg_time), 2) AS avg_time,
|
|
341
|
+
round(avg(vtbh.avg_speed)) AS avg_speed
|
|
342
|
+
FROM ( SELECT wdrn.name,
|
|
343
|
+
CASE
|
|
344
|
+
WHEN wdrn.idx < 38 THEN 'group1'::text
|
|
345
|
+
ELSE 'group2'::text
|
|
346
|
+
END AS skupina,
|
|
347
|
+
rl.ts::date AS datum,
|
|
348
|
+
date_part('hour'::text, rl.ts) AS hodina,
|
|
349
|
+
(to_char(date_part('hour'::text, rl.ts), '09'::text) || ' -'::text) || to_char(date_part('hour'::text, rl.ts) + 1::double precision, '09'::text) AS cas_interval,
|
|
350
|
+
rl.avg_time,
|
|
351
|
+
rl.avg_speed
|
|
352
|
+
FROM ( SELECT rl_1.route_id,
|
|
353
|
+
date_trunc('hour'::text, to_timestamp((rl_1.update_time / 1000)::double precision)) AS ts,
|
|
354
|
+
round(avg(rl_1."time"), 2) AS avg_time,
|
|
355
|
+
round(avg(rl_1.length * 1000 / (NULLIF(rl_1."time", 0) * 360)), 2) AS avg_speed
|
|
356
|
+
FROM wazett.wazett_route_lives rl_1
|
|
357
|
+
WHERE rl_1.update_time >= '1665360000000'::bigint
|
|
358
|
+
GROUP BY rl_1.route_id, (date_trunc('hour'::text, to_timestamp((rl_1.update_time / 1000)::double precision)))) rl
|
|
359
|
+
JOIN analytic.waze_dashboard_route_name wdrn ON wdrn.route_id = rl.route_id) vtbh
|
|
360
|
+
WHERE vtbh.skupina = 'group1'::text AND vtbh.datum >= '2022-10-10'::date AND vtbh.datum <= '2022-10-25'::date AND (date_part('dow'::text, vtbh.datum) = ANY (ARRAY[2::double precision, 3::double precision, 4::double precision])) OR vtbh.skupina = 'group1'::text AND vtbh.datum >= '2023-01-09'::date AND vtbh.datum <= '2023-01-29'::date AND (date_part('dow'::text, vtbh.datum) = ANY (ARRAY[2::double precision, 3::double precision, 4::double precision]))
|
|
361
|
+
GROUP BY vtbh.name, vtbh.hodina
|
|
362
|
+
WITH DATA;
|
|
@@ -0,0 +1,365 @@
|
|
|
1
|
+
-- analytic.mv_mala_strana_normal source
|
|
2
|
+
DROP MATERIALIZED VIEW analytic.mv_mala_strana_normal;
|
|
3
|
+
CREATE MATERIALIZED VIEW analytic.mv_mala_strana_normal
|
|
4
|
+
TABLESPACE pg_default
|
|
5
|
+
AS SELECT vtbh.name,
|
|
6
|
+
vtbh.hodina,
|
|
7
|
+
round(avg(vtbh.avg_time), 2) AS avg_time,
|
|
8
|
+
round(avg(vtbh.avg_speed)) AS avg_speed
|
|
9
|
+
FROM ( SELECT wdrn.name,
|
|
10
|
+
CASE
|
|
11
|
+
WHEN wdrn.idx < 38 THEN 'group1'::text
|
|
12
|
+
ELSE 'group2'::text
|
|
13
|
+
END AS skupina,
|
|
14
|
+
rl.ts::date AS datum,
|
|
15
|
+
date_part('hour'::text, rl.ts) AS hodina,
|
|
16
|
+
(to_char(date_part('hour'::text, rl.ts), '09'::text) || ' -'::text) || to_char(date_part('hour'::text, rl.ts) + 1::double precision, '09'::text) AS cas_interval,
|
|
17
|
+
rl.avg_time,
|
|
18
|
+
rl.avg_speed
|
|
19
|
+
FROM ( SELECT rl_1.route_id,
|
|
20
|
+
date_trunc('hour'::text, to_timestamp((rl_1.update_time / 1000)::double precision)) AS ts,
|
|
21
|
+
round(avg(rl_1."time"), 2) AS avg_time,
|
|
22
|
+
round(avg(rl_1.length * 1000 / (NULLIF(rl_1."time", 0) * 360)), 2) AS avg_speed
|
|
23
|
+
FROM wazett.wazett_route_lives rl_1
|
|
24
|
+
WHERE rl_1.update_time >= '1665360000000'::bigint
|
|
25
|
+
GROUP BY rl_1.route_id, (date_trunc('hour'::text, to_timestamp((rl_1.update_time / 1000)::double precision)))) rl
|
|
26
|
+
JOIN analytic.waze_dashboard_route_name wdrn ON wdrn.route_id = rl.route_id) vtbh
|
|
27
|
+
WHERE (vtbh.skupina = 'group1'::text AND vtbh.datum >= '2022-10-10'::date AND vtbh.datum <= '2022-10-25'::date AND (date_part('dow'::text, vtbh.datum) = ANY (ARRAY[2::double precision, 3::double precision, 4::double precision])))
|
|
28
|
+
OR (vtbh.skupina = 'group2'::text AND vtbh.datum >= '2023-01-09'::date AND vtbh.datum <= '2023-01-29'::date AND (date_part('dow'::text, vtbh.datum) = ANY (ARRAY[2::double precision, 3::double precision, 4::double precision])))
|
|
29
|
+
GROUP BY vtbh.name, vtbh.hodina
|
|
30
|
+
WITH DATA;
|
|
31
|
+
|
|
32
|
+
CREATE OR REPLACE PROCEDURE analytic.update_waze()
|
|
33
|
+
LANGUAGE plpgsql
|
|
34
|
+
AS $procedure$
|
|
35
|
+
|
|
36
|
+
declare
|
|
37
|
+
lastupdatetimestamp timestamptz;
|
|
38
|
+
lastupdateunix bigint;
|
|
39
|
+
begin
|
|
40
|
+
select
|
|
41
|
+
case
|
|
42
|
+
when start_day is not null
|
|
43
|
+
then start_day
|
|
44
|
+
else '2021-01-01'
|
|
45
|
+
end as start_day_from into lastupdatetimestamp
|
|
46
|
+
from (select max(date)-interval '1 days' start_day from analytic.waze_route_travel_times_agg) wazemax;
|
|
47
|
+
|
|
48
|
+
lastupdateunix := extract ('epoch' from lastupdatetimestamp) * 1000;
|
|
49
|
+
-- inserting data is incremental, since the last timestamp already in the table
|
|
50
|
+
insert into analytic.waze_route_travel_times_agg
|
|
51
|
+
SELECT ts.route_id,
|
|
52
|
+
ts.year,
|
|
53
|
+
ts.month,
|
|
54
|
+
ts.day,
|
|
55
|
+
ts.dow,
|
|
56
|
+
ts.hour,
|
|
57
|
+
ts.quarter,
|
|
58
|
+
ts.hour + (ts.quarter::numeric / 60::numeric)::double precision AS hour_quarter,
|
|
59
|
+
((((((((ts.year || '-'::text) || ts.month) || '-'::text) || ts.day) || ' '::text) || ts.hour) || ':'::text) || ts.quarter)::timestamp without time zone AS date,
|
|
60
|
+
avg(ts.travel_time)::integer AS travel_time
|
|
61
|
+
FROM ( SELECT raw.route_id,
|
|
62
|
+
raw.update_time,
|
|
63
|
+
raw.travel_time,
|
|
64
|
+
date_part('year'::text, raw.update_time) AS year,
|
|
65
|
+
date_part('month'::text, raw.update_time) AS month,
|
|
66
|
+
date_part('day'::text, raw.update_time) AS day,
|
|
67
|
+
date_part('dow'::text, raw.update_time) AS dow,
|
|
68
|
+
date_part('hour'::text, raw.update_time) AS hour,
|
|
69
|
+
date_part('minute'::text, raw.update_time) AS minute,
|
|
70
|
+
date_part('minute'::text, raw.update_time)::integer / 15 * 15 AS quarter
|
|
71
|
+
FROM ( SELECT wazett_route_lives.route_id,
|
|
72
|
+
timezone('Europe/Prague'::text, to_timestamp((wazett_route_lives.update_time / 1000)::double precision)::timestamp without time zone) AS update_time,
|
|
73
|
+
wazett_route_lives."time" AS travel_time
|
|
74
|
+
FROM wazett.wazett_route_lives
|
|
75
|
+
JOIN analytic.waze_dashboard_route_name wdrn ON wdrn.route_id = wazett_route_lives.route_id
|
|
76
|
+
where wazett_route_lives.update_time > lastupdateunix -- this is the time condition for the increment
|
|
77
|
+
) raw
|
|
78
|
+
) ts
|
|
79
|
+
WHERE ts.year > 2000::double precision
|
|
80
|
+
GROUP BY ts.route_id, ts.year, ts.month, ts.day, ts.dow, ts.hour, ts.quarter
|
|
81
|
+
ON CONFLICT (route_id, year, month, day, dow, hour, quarter, hour_quarter)
|
|
82
|
+
DO update
|
|
83
|
+
SET
|
|
84
|
+
date = EXCLUDED.date,
|
|
85
|
+
travel_time = EXCLUDED.travel_time
|
|
86
|
+
;
|
|
87
|
+
end;
|
|
88
|
+
$procedure$
|
|
89
|
+
;
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
CREATE OR REPLACE PROCEDURE analytic.update_mala_strana()
|
|
93
|
+
LANGUAGE plpgsql
|
|
94
|
+
AS $procedure$
|
|
95
|
+
declare
|
|
96
|
+
lastupdatetimestamp timestamptz;
|
|
97
|
+
lastupdateunix bigint;
|
|
98
|
+
begin
|
|
99
|
+
begin
|
|
100
|
+
select
|
|
101
|
+
case
|
|
102
|
+
when start_day is not null
|
|
103
|
+
then start_day
|
|
104
|
+
else '2022-01-01'
|
|
105
|
+
end as start_day_from into lastupdatetimestamp
|
|
106
|
+
from (select max(datum)-interval '1 days' start_day from analytic.mala_strana_route_hour_core) malastranamax;
|
|
107
|
+
|
|
108
|
+
lastupdateunix := extract ('epoch' from lastupdatetimestamp) * 1000;
|
|
109
|
+
|
|
110
|
+
-- dopoctu hodinovou agregaci (podobné v_mala_strana_route_hour_core) POT5EBUJEME TAKTO?
|
|
111
|
+
insert into analytic.mala_strana_route_hour_core
|
|
112
|
+
SELECT
|
|
113
|
+
wdrn.name,
|
|
114
|
+
rl.ts::date AS datum,
|
|
115
|
+
date_part('hour'::text, rl.ts) AS hodina,
|
|
116
|
+
(to_char(date_part('hour'::text, rl.ts), '09'::text) || ' -'::text) || to_char(date_part('hour'::text, rl.ts) + 1::double precision, '09'::text) AS cas_interval,
|
|
117
|
+
avg_time,
|
|
118
|
+
avg_speed
|
|
119
|
+
FROM (
|
|
120
|
+
select
|
|
121
|
+
route_id
|
|
122
|
+
-- timezone('Europe/Prague'::text, to_timestamp((update_time / 1000)::double precision)::timestamp without time zone)
|
|
123
|
+
,date_trunc('hour', to_timestamp((update_time / 1000))::timestamp) as ts
|
|
124
|
+
,round(avg(time), 2) AS avg_time
|
|
125
|
+
,round(avg(rl.length * 1000 / (nullif(rl."time", 0) * 360)), 2) AS avg_speed
|
|
126
|
+
from wazett.wazett_route_lives rl
|
|
127
|
+
where
|
|
128
|
+
-- route_id = 22706 and
|
|
129
|
+
rl.update_time > lastupdateunix and
|
|
130
|
+
rl.length > 0
|
|
131
|
+
group by 1,2) rl
|
|
132
|
+
JOIN analytic.waze_dashboard_route_name wdrn ON wdrn.route_id = rl.route_id
|
|
133
|
+
ON CONFLICT (name,datum,hodina,cas_interval)
|
|
134
|
+
DO update
|
|
135
|
+
SET avg_time = EXCLUDED.avg_time,
|
|
136
|
+
avg_speed = EXCLUDED.avg_speed
|
|
137
|
+
;
|
|
138
|
+
|
|
139
|
+
insert into analytic.mala_strana_data_all
|
|
140
|
+
WITH
|
|
141
|
+
v_ms_route_hour as (
|
|
142
|
+
SELECT p.name,
|
|
143
|
+
p.datum,
|
|
144
|
+
p.hodina,
|
|
145
|
+
p.cas_interval,
|
|
146
|
+
p.avg_time,
|
|
147
|
+
p.avg_speed,
|
|
148
|
+
n.avg_time AS normal_avg_time,
|
|
149
|
+
n.avg_speed AS normal_avg_speed
|
|
150
|
+
FROM analytic.mala_strana_route_hour_core p
|
|
151
|
+
LEFT JOIN analytic.mv_mala_strana_normal n ON n.name = p.name AND p.hodina = n.hodina
|
|
152
|
+
where datum > lastupdatetimestamp
|
|
153
|
+
),
|
|
154
|
+
-- konec v_ms_route_hour
|
|
155
|
+
v_ms_union_time_interval as (
|
|
156
|
+
WITH hodiny AS (
|
|
157
|
+
SELECT brh.name,
|
|
158
|
+
brh.datum,
|
|
159
|
+
brh.hodina,
|
|
160
|
+
brh.cas_interval,
|
|
161
|
+
brh.avg_time,
|
|
162
|
+
brh.avg_speed,
|
|
163
|
+
brh.normal_avg_time,
|
|
164
|
+
brh.normal_avg_speed
|
|
165
|
+
FROM v_ms_route_hour brh
|
|
166
|
+
WHERE brh.datum < CURRENT_DATE OR brh.hodina < date_part('hour'::text, now())
|
|
167
|
+
), den AS (
|
|
168
|
+
SELECT hodiny.name,
|
|
169
|
+
hodiny.datum,
|
|
170
|
+
'0 - 24h'::text AS cas_interval,
|
|
171
|
+
round(avg(hodiny.avg_time), 2) AS avg_time,
|
|
172
|
+
round(avg(hodiny.avg_speed), 2) AS avg_speed,
|
|
173
|
+
round(avg(hodiny.normal_avg_time), 2) AS normal_avg_time,
|
|
174
|
+
round(avg(hodiny.normal_avg_speed), 2) AS normal_avg_speed
|
|
175
|
+
FROM hodiny
|
|
176
|
+
WHERE hodiny.datum < CURRENT_DATE
|
|
177
|
+
GROUP BY hodiny.name, hodiny.datum
|
|
178
|
+
), h15_18 AS (
|
|
179
|
+
SELECT hodiny.name,
|
|
180
|
+
hodiny.datum,
|
|
181
|
+
'15 -18'::text AS cas_interval,
|
|
182
|
+
round(avg(hodiny.avg_time), 2) AS avg_time,
|
|
183
|
+
round(avg(hodiny.avg_speed), 2) AS avg_speed,
|
|
184
|
+
round(avg(hodiny.normal_avg_time), 2) AS normal_avg_time,
|
|
185
|
+
round(avg(hodiny.normal_avg_speed), 2) AS normal_avg_speed
|
|
186
|
+
FROM hodiny
|
|
187
|
+
WHERE hodiny.hodina >= 15::double precision AND hodiny.hodina <= 17::double precision AND (hodiny.datum < CURRENT_DATE OR hodiny.hodina > 17::double precision)
|
|
188
|
+
GROUP BY hodiny.name, hodiny.datum
|
|
189
|
+
), h22_6 AS (
|
|
190
|
+
SELECT hodiny.name,
|
|
191
|
+
hodiny.datum,
|
|
192
|
+
'22 - 06'::text AS cas_interval,
|
|
193
|
+
round(avg(hodiny.avg_time), 2) AS avg_time,
|
|
194
|
+
round(avg(hodiny.avg_speed), 2) AS avg_speed,
|
|
195
|
+
round(avg(hodiny.normal_avg_time), 2) AS normal_avg_time,
|
|
196
|
+
round(avg(hodiny.normal_avg_speed), 2) AS normal_avg_speed
|
|
197
|
+
FROM hodiny
|
|
198
|
+
WHERE NOT (hodiny.hodina >= 6::double precision AND hodiny.hodina <= 21::double precision) AND hodiny.datum < CURRENT_DATE
|
|
199
|
+
GROUP BY hodiny.name, hodiny.datum
|
|
200
|
+
), h6_22 AS (
|
|
201
|
+
SELECT hodiny.name,
|
|
202
|
+
hodiny.datum,
|
|
203
|
+
'06 - 22'::text AS cas_interval,
|
|
204
|
+
round(avg(hodiny.avg_time), 2) AS avg_time,
|
|
205
|
+
round(avg(hodiny.avg_speed), 2) AS avg_speed,
|
|
206
|
+
round(avg(hodiny.normal_avg_time), 2) AS normal_avg_time,
|
|
207
|
+
round(avg(hodiny.normal_avg_speed), 2) AS normal_avg_speed
|
|
208
|
+
FROM hodiny
|
|
209
|
+
WHERE hodiny.hodina >= 6::double precision AND hodiny.hodina <= 21::double precision AND (hodiny.datum < CURRENT_DATE OR hodiny.hodina > 21::double precision)
|
|
210
|
+
GROUP BY hodiny.name, hodiny.datum
|
|
211
|
+
), h7_10 AS (
|
|
212
|
+
SELECT hodiny.name,
|
|
213
|
+
hodiny.datum,
|
|
214
|
+
'07 - 10'::text AS cas_interval,
|
|
215
|
+
round(avg(hodiny.avg_time), 2) AS avg_time,
|
|
216
|
+
round(avg(hodiny.avg_speed), 2) AS avg_speed,
|
|
217
|
+
round(avg(hodiny.normal_avg_time), 2) AS normal_avg_time,
|
|
218
|
+
round(avg(hodiny.normal_avg_speed), 2) AS normal_avg_speed
|
|
219
|
+
FROM hodiny
|
|
220
|
+
WHERE hodiny.hodina >= 7::double precision AND hodiny.hodina <= 9::double precision AND (hodiny.datum < CURRENT_DATE OR hodiny.hodina > 10::double precision)
|
|
221
|
+
GROUP BY hodiny.name, hodiny.datum
|
|
222
|
+
), h7_11_15_19 AS (
|
|
223
|
+
SELECT hodiny.name,
|
|
224
|
+
hodiny.datum,
|
|
225
|
+
'07 - 11, 15 - 19'::text AS cas_interval,
|
|
226
|
+
round(avg(hodiny.avg_time), 2) AS avg_time,
|
|
227
|
+
round(avg(hodiny.avg_speed), 2) AS avg_speed,
|
|
228
|
+
round(avg(hodiny.normal_avg_time), 2) AS normal_avg_time,
|
|
229
|
+
round(avg(hodiny.normal_avg_speed), 2) AS normal_avg_speed
|
|
230
|
+
FROM hodiny
|
|
231
|
+
WHERE (hodiny.hodina >= 7::double precision AND hodiny.hodina <= 10::double precision OR hodiny.hodina >= 15::double precision AND hodiny.hodina <= 18::double precision) AND (hodiny.datum < CURRENT_DATE OR hodiny.hodina > 18::double precision)
|
|
232
|
+
GROUP BY hodiny.name, hodiny.datum
|
|
233
|
+
)
|
|
234
|
+
SELECT hodiny.name,
|
|
235
|
+
hodiny.datum,
|
|
236
|
+
hodiny.cas_interval,
|
|
237
|
+
hodiny.avg_time,
|
|
238
|
+
hodiny.avg_speed,
|
|
239
|
+
hodiny.normal_avg_time,
|
|
240
|
+
hodiny.normal_avg_speed
|
|
241
|
+
FROM hodiny
|
|
242
|
+
UNION ALL
|
|
243
|
+
SELECT den.name,
|
|
244
|
+
den.datum,
|
|
245
|
+
den.cas_interval,
|
|
246
|
+
den.avg_time,
|
|
247
|
+
den.avg_speed,
|
|
248
|
+
den.normal_avg_time,
|
|
249
|
+
den.normal_avg_speed
|
|
250
|
+
FROM den
|
|
251
|
+
UNION ALL
|
|
252
|
+
SELECT h15_18.name,
|
|
253
|
+
h15_18.datum,
|
|
254
|
+
h15_18.cas_interval,
|
|
255
|
+
h15_18.avg_time,
|
|
256
|
+
h15_18.avg_speed,
|
|
257
|
+
h15_18.normal_avg_time,
|
|
258
|
+
h15_18.normal_avg_speed
|
|
259
|
+
FROM h15_18
|
|
260
|
+
UNION ALL
|
|
261
|
+
SELECT h22_6.name,
|
|
262
|
+
h22_6.datum,
|
|
263
|
+
h22_6.cas_interval,
|
|
264
|
+
h22_6.avg_time,
|
|
265
|
+
h22_6.avg_speed,
|
|
266
|
+
h22_6.normal_avg_time,
|
|
267
|
+
h22_6.normal_avg_speed
|
|
268
|
+
FROM h22_6
|
|
269
|
+
UNION ALL
|
|
270
|
+
SELECT h6_22.name,
|
|
271
|
+
h6_22.datum,
|
|
272
|
+
h6_22.cas_interval,
|
|
273
|
+
h6_22.avg_time,
|
|
274
|
+
h6_22.avg_speed,
|
|
275
|
+
h6_22.normal_avg_time,
|
|
276
|
+
h6_22.normal_avg_speed
|
|
277
|
+
FROM h6_22
|
|
278
|
+
UNION ALL
|
|
279
|
+
SELECT h7_10.name,
|
|
280
|
+
h7_10.datum,
|
|
281
|
+
h7_10.cas_interval,
|
|
282
|
+
h7_10.avg_time,
|
|
283
|
+
h7_10.avg_speed,
|
|
284
|
+
h7_10.normal_avg_time,
|
|
285
|
+
h7_10.normal_avg_speed
|
|
286
|
+
FROM h7_10
|
|
287
|
+
UNION ALL
|
|
288
|
+
SELECT h7_11_15_19.name,
|
|
289
|
+
h7_11_15_19.datum,
|
|
290
|
+
h7_11_15_19.cas_interval,
|
|
291
|
+
h7_11_15_19.avg_time,
|
|
292
|
+
h7_11_15_19.avg_speed,
|
|
293
|
+
h7_11_15_19.normal_avg_time,
|
|
294
|
+
h7_11_15_19.normal_avg_speed
|
|
295
|
+
FROM h7_11_15_19
|
|
296
|
+
),
|
|
297
|
+
-----------------------
|
|
298
|
+
data1 AS (
|
|
299
|
+
SELECT
|
|
300
|
+
trasy.name,
|
|
301
|
+
trasy.name_trasa,
|
|
302
|
+
trasy.name_usek,
|
|
303
|
+
CASE
|
|
304
|
+
WHEN trasy.is_opacny_smer THEN 'Zpět'::text
|
|
305
|
+
ELSE 'Tam'::text
|
|
306
|
+
END AS smer,
|
|
307
|
+
vbu.datum,
|
|
308
|
+
vbu.cas_interval,
|
|
309
|
+
vbu.avg_time,
|
|
310
|
+
vbu.avg_speed,
|
|
311
|
+
vbu.normal_avg_time,
|
|
312
|
+
vbu.normal_avg_speed
|
|
313
|
+
FROM v_ms_union_time_interval vbu
|
|
314
|
+
JOIN analytic.v_mala_strana_route trasy ON trasy.name = vbu.name
|
|
315
|
+
),
|
|
316
|
+
data2 AS (
|
|
317
|
+
SELECT
|
|
318
|
+
data1.name_trasa,
|
|
319
|
+
data1.name_usek,
|
|
320
|
+
'Oba'::text AS smer,
|
|
321
|
+
data1.datum,
|
|
322
|
+
data1.cas_interval,
|
|
323
|
+
sum(data1.avg_time) AS avg_time,
|
|
324
|
+
avg(data1.avg_speed) AS avg_speed,
|
|
325
|
+
sum(data1.normal_avg_time) AS normal_avg_time,
|
|
326
|
+
avg(data1.normal_avg_speed) AS normal_avg_speed
|
|
327
|
+
FROM data1
|
|
328
|
+
GROUP BY data1.name_trasa, data1.name_usek, 'Oba'::text, data1.datum, data1.cas_interval
|
|
329
|
+
)
|
|
330
|
+
SELECT data1.name,
|
|
331
|
+
data1.name_trasa,
|
|
332
|
+
data1.name_usek,
|
|
333
|
+
data1.smer,
|
|
334
|
+
data1.datum,
|
|
335
|
+
data1.cas_interval,
|
|
336
|
+
data1.avg_time,
|
|
337
|
+
data1.avg_speed,
|
|
338
|
+
data1.normal_avg_time,
|
|
339
|
+
data1.normal_avg_speed
|
|
340
|
+
FROM data1
|
|
341
|
+
UNION
|
|
342
|
+
SELECT vbt.name,
|
|
343
|
+
data2.name_trasa,
|
|
344
|
+
data2.name_usek,
|
|
345
|
+
data2.smer,
|
|
346
|
+
data2.datum,
|
|
347
|
+
data2.cas_interval,
|
|
348
|
+
data2.avg_time,
|
|
349
|
+
data2.avg_speed,
|
|
350
|
+
data2.normal_avg_time,
|
|
351
|
+
data2.normal_avg_speed
|
|
352
|
+
FROM data2
|
|
353
|
+
JOIN analytic.v_mala_strana_route vbt ON vbt.name_trasa = data2.name_trasa AND vbt.name_usek = data2.name_usek AND NOT vbt.is_opacny_smer
|
|
354
|
+
on conflict (name,name_trasa,name_usek,smer,datum,cas_interval)
|
|
355
|
+
do update
|
|
356
|
+
SET avg_time = EXCLUDED.avg_time,
|
|
357
|
+
avg_speed = EXCLUDED.avg_speed,
|
|
358
|
+
normal_avg_time = EXCLUDED.normal_avg_time,
|
|
359
|
+
normal_avg_speed = EXCLUDED.normal_avg_speed;
|
|
360
|
+
end;
|
|
361
|
+
end;
|
|
362
|
+
$procedure$
|
|
363
|
+
;
|
|
364
|
+
|
|
365
|
+
|