Разница во времени Postgres между отметками времени в минутах

мне нужно рассчитать разницу во времени между строками datetime. Но я хочу рассчитывать их ежедневно, также я хочу сгруппировать их по идентификатору. Как я могу это сделать? моя таблица выглядит так:  введите описание изображения здесь


person merveozylmazz    schedule 25.12.2019    source источник
comment
Пожалуйста, поделитесь ожидаемыми результатами   -  person dassum    schedule 25.12.2019


Ответы (2)


Проблема связана с неоднозначным термином «разница в менуэтах с отметкой времени». Когда Postgres выполняет вычитание отметки времени, результатом является интервал. Но интервал состоит из дней, часов, менуэтов и секунд. Когда вы говорите «разница в менуэтах», вы имеете в виду извлечение менуэтов из интервала. Или вы имеете в виду общее количество минут, представленное как (24 * 60 * дней) + (60 * часов) + (менуэты), или что-то еще? См. Следующие примеры:

with test_dates(d1,d2) as
     ( values ('2019-10-02 11:00:47'::timestamp, '2019-10-02 07:35:02'::timestamp)
            , ('2015_09-15 11:15:42'::timestamp, '2019-10-22 17:45:00'::timestamp)
     ) 
select greatest(d1,d2) - least(d1,d2) int_diff
     , extract('minutes' from greatest(d1,d2) - least(d1,d2)) min_diff 
     , 60* (extract('hours' from greatest(d1,d2) - least(d1,d2))) +
       extract('minutes' from greatest(d1,d2) - least(d1,d2)) diff_hr_min
     , (24*60)*(extract('days' from greatest(d1,d2) - least(d1,d2))) +
       60* (extract('hours' from greatest(d1,d2) - least(d1,d2))) +
       extract('minutes' from greatest(d1,d2) - least(d1,d2))  diff_daya_hr_min          
from test_dates; 
person Belayer    schedule 28.12.2019

Попробуй это:

SELECT DATE_PART('minute', max(date) - min(date)) AS time_difference 
FROM tablename 
GROUP BY DATE(date), id;

Вы можете добавить id и DATE(date) к SELECT, чтобы проверить истинность результата, например:

SELECT DATE(date), id, DATE_PART('minute', max(date) - min(date)) AS time_difference 
FROM tablename 
GROUP BY DATE(date), id;

См. функции извлечения Postgresql и Функции даты и времени для получения дополнительной информации.

person shayan rok rok    schedule 25.12.2019
comment
Это приведет к появлению только минутного поля. Если разница составляет 2 часа 10 минут, возвращается только 10 минут. Пример: select date_part('minute', '2h 10m'::interval);. - person Schwern; 29.12.2019