мне нужно рассчитать разницу во времени между строками datetime. Но я хочу рассчитывать их ежедневно, также я хочу сгруппировать их по идентификатору. Как я могу это сделать? моя таблица выглядит так:
Разница во времени Postgres между отметками времени в минутах
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
Это приведет к появлению только минутного поля. Если разница составляет 2 часа 10 минут, возвращается только 10 минут. Пример:
select date_part('minute', '2h 10m'::interval);
.
- person Schwern; 29.12.2019