Как запросить PostgreSQL, чтобы получить общее время, добавив дату для всех доступных строк? - PullRequest
0 голосов
/ 21 ноября 2018

Я работаю над энергетическим приложением, где мы контролируем дизель-генератор и электрические счетчики завода.

У нас есть эти данные в базе данных.Ниже приведены некоторые записи в БД.

ip           meter_id   device_time
===========================================
100.74.61.93    s1  r1  2018-11-01 09:02:42
100.74.61.93    s1  r1  2018-11-01 09:02:57
100.74.61.93    s1  r1  2018-11-01 09:03:12
100.74.61.93    s1  r1  2018-11-01 09:03:27
100.74.61.93    s1  r1  2018-11-01 09:03:42
100.74.61.93    s1  r1  2018-11-01 09:03:57
100.74.61.93    s1  r1  2018-11-01 09:04:17
100.74.61.93    s1  r1  2018-11-01 09:04:27
100.74.61.93    s1  r1  2018-11-01 09:04:47
100.74.61.93    s1  r1  2018-11-01 09:04:57
100.74.61.93    s1  r1  2018-11-01 09:05:12
100.74.61.93    s1  r1  2018-11-01 09:05:27
100.74.61.93    s1  r1  2018-11-01 09:05:47
100.74.61.93    s1  r1  2018-11-01 09:05:57
100.74.61.93    s1  r1  2018-11-01 09:06:12
100.74.61.93    s1  r1  2018-11-01 09:06:27
100.74.61.93    s1  r1  2018-11-01 09:06:42
100.74.61.93    s1  r1  2018-11-01 09:06:57
100.74.61.93    s1  r1  2018-11-01 09:07:12
100.74.61.93    s1  r1  2018-11-01 09:07:27
100.74.61.93    s1  r1  2018-11-01 09:07:42
100.74.61.93    s1  r1  2018-11-01 09:07:57
100.74.61.93    s1  r1  2018-11-01 09:08:12
100.74.61.93    s1  r1  2018-11-01 09:08:27
100.74.61.93    s1  r1  2018-11-01 09:08:47
100.74.61.93    s1  r1  2018-11-01 09:08:57
100.74.61.93    s1  r1  2018-11-01 09:09:12
100.74.61.93    s1  r1  2018-11-01 09:09:27
100.74.61.93    s1  r1  2018-11-01 09:09:42
100.74.61.93    s1  r1  2018-11-01 09:09:57
100.74.61.93    s1  r1  2018-11-01 09:10:12
100.74.61.93    s1  r1  2018-11-01 09:10:27
100.74.61.93    s1  r1  2018-11-01 09:10:42
100.74.61.93    s1  r1  2018-11-01 09:10:57
100.74.61.93    s1  r1  2018-11-01 09:11:12
100.74.61.93    s1  r1  2018-11-01 09:11:27
100.74.61.93    s1  r1  2018-11-01 09:11:42
100.74.61.93    s1  r1  2018-11-01 09:11:57
100.74.61.93    s1  r1  2018-11-01 09:12:12
100.74.61.93    s1  r1  2018-11-01 09:12:27
100.74.61.93    s1  r1  2018-11-01 09:12:42
100.74.61.93    s1  r1  2018-11-01 09:12:57
100.74.61.93    s1  r1  2018-11-01 09:13:12
100.74.61.93    s1  r1  2018-11-01 09:13:27
100.74.61.93    s1  r1  2018-11-01 11:15:42
100.74.61.93    s1  r1  2018-11-01 09:13:42
100.74.61.93    s1  r1  2018-11-01 09:13:57
100.74.61.93    s1  r1  2018-11-01 11:15:58
100.74.61.93    s1  r1  2018-11-01 11:16:12
100.74.61.93    s1  r1  2018-11-01 11:13:42
100.74.61.93    s1  r1  2018-11-01 11:13:57
100.74.61.93    s1  r1  2018-11-01 11:14:12
100.74.61.93    s1  r1  2018-11-01 11:14:27
100.74.61.93    s1  r1  2018-11-01 11:14:42
100.74.61.93    s1  r1  2018-11-01 11:14:57
100.74.61.93    s1  r1  2018-11-01 11:15:12
100.74.61.93    s1  r1  2018-11-01 11:15:27
100.74.61.93    s1  r1  2018-11-01 11:16:27
100.74.61.93    s1  r1  2018-11-01 11:16:42
100.74.61.93    s1  r1  2018-11-01 11:16:57
100.74.61.93    s1  r1  2018-11-01 11:17:13
100.74.61.93    s1  r1  2018-11-01 11:17:27
100.74.61.93    s1  r1  2018-11-01 11:17:42
100.74.61.93    s1  r1  2018-11-01 11:17:57
100.74.61.93    s1  r1  2018-11-01 11:18:12
100.74.61.93    s1  r1  2018-11-01 11:18:28
100.74.61.93    s1  r1  2018-11-01 11:18:42
100.74.61.93    s1  r1  2018-11-01 11:18:58
100.74.61.93    s1  r1  2018-11-01 11:19:12
100.74.61.93    s1  r1  2018-11-01 11:19:27
100.74.61.93    s1  r1  2018-11-01 11:19:42
100.74.61.93    s1  r1  2018-11-01 11:19:58
100.74.61.93    s1  r1  2018-11-01 11:20:13
100.74.61.93    s1  r1  2018-11-01 11:20:27
100.74.61.93    s1  r1  2018-11-01 11:20:43
100.74.61.93    s1  r1  2018-11-01 11:20:58
100.74.61.93    s1  r1  2018-11-01 11:21:13
100.74.61.93    s1  r1  2018-11-01 11:21:28
100.74.61.93    s1  r1  2018-11-01 11:21:43
100.74.61.93    s1  r1  2018-11-01 11:21:58
100.74.61.93    s1  r1  2018-11-01 11:48:58
100.74.61.93    s1  r1  2018-11-01 11:49:13
100.74.61.93    s1  r1  2018-11-01 11:49:28
100.74.61.93    s1  r1  2018-11-01 11:49:43
100.74.61.93    s1  r1  2018-11-01 11:49:58
100.74.61.93    s1  r1  2018-11-01 11:50:13
100.74.61.93    s1  r1  2018-11-01 11:50:28
100.74.61.93    s1  r1  2018-11-01 11:50:43
100.74.61.93    s1  r1  2018-11-01 11:50:58
100.74.61.93    s1  r1  2018-11-01 11:51:13
100.74.61.93    s1  r1  2018-11-01 11:51:28
100.74.61.93    s1  r1  2018-11-01 11:51:43
100.74.61.93    s1  r1  2018-11-01 11:51:58
100.74.61.93    s1  r1  2018-11-01 11:52:13
100.74.61.93    s1  r1  2018-11-01 11:52:28
100.74.61.93    s1  r1  2018-11-01 11:52:43
100.74.61.93    s1  r1  2018-11-01 11:52:58
100.74.61.93    s1  r1  2018-11-01 11:53:13
100.74.61.93    s1  r1  2018-11-01 11:53:28
100.74.61.93    s1  r1  2018-11-01 11:53:43
100.74.61.93    s1  r1  2018-11-01 11:53:58
100.74.61.93    s1  r1  2018-11-01 11:54:13
100.74.61.93    s1  r1  2018-11-01 11:54:28
100.74.61.93    s1  r1  2018-11-01 11:54:43
100.74.61.93    s1  r1  2018-11-01 11:54:58
100.74.61.93    s1  r1  2018-11-01 11:55:13
100.74.61.93    s1  r1  2018-11-01 11:55:28
100.74.61.93    s1  r1  2018-11-01 11:55:43
100.74.61.93    s1  r1  2018-11-01 11:55:58
100.74.61.93    s1  r1  2018-11-01 11:56:13
100.74.61.93    s1  r1  2018-11-01 11:56:28

Поскольку вы можете проверить вышеуказанные записи из базы данных, каждая строка имеет device_time, что означает, что в то время дизельный генератор работал.

Теперь я хочу посчитать время в формате, подобном 01 days, 2 hours, 10 min, который скажет мне, что за сколько времени он работал?

Я написал запрос, который дал мне результат.

select
    count(device_timestamp) * '1 minute'::interval as operatingtime
from
    (
    select
        time_bucket('1 min',
        device_time at time zone 'Asia/Kolkata') as device_timestamp
    from
        public.schneider_new
    where
        meter_id in ('s1')
        and device_time >= '2018-11-01T00:00:00.000'
        and device_time <= now()
    group by
        device_timestamp
    order by
        device_timestamp as ) as tab

Вывод:

0 лет 0 мес 0 дней 30 часов 28 минут 0,00 с

Это дает мнерезультат, но я не хочу 0 years 0 mons 0 secs в вышеприведенном выводе.

А также, если часы> 24, т. е. в данном случае 30 часов, результат должен быть равен 1 day 6 hours 28 mins.

Где я иду не так?или есть ли другой способ подсчета времени, в течение которого ГД работал в течение заданного периода времени?

ОБНОВЛЕНИЕ:

Я попытался выполнить запрос с этим

(count(device_timestamp)::numeric/60)/24 * '1 day'::interval as operatingtime

Вывод:

0 лет 0 мес. 1 день 6 часов 28 мин. 0,00 с.

Я получилправильный вывод, т.е. 1 days 6 hours 28 mins, единственное, что я сейчас ищу, это удалить другой 0 years 0 mons 0.00 secs.

...