xom`s pinion - Tom Hnatovsky Blog

SUM intervalů v PostgreSQL

10. ledna 2015 PostgreSQL nekomentováno

PostgreSQL tutoriálNěkterá data a agregace dat lze z databáze dostat jednoduše, jiné složitěji. Ale prakticky vše má své řešení, jak jsme si zde již párkrát ukázali.

Dnes tu máme aplikaci pro evidenci pracovní doby, ve které je nutné pracovat s rozdíly časů a čas od času se vyskytne i potřeba součtu všech rozdílů z dceřinné tabulky.

Rozdíl datových typů timestamp, time či date lze jednoduše získat použitím prostého rozdílu.

SELECT time_to - time_from FROM workers

Výsledkem je hodnota typu interval, se kterým pracuje mnoho dalších metod v Postgre.

A teď k té sumě

Pokud ale jsou odpracované hodiny uloženy v dceřiné tabulce, tak potřebujeme provést agregaci dat, která se nám jednoduše s intervalem nepovede.

SUM(time_to - time_from)

bude vracet null.

Jako nejjednodušší řešení mi přijde volba jednotky, ve které chci agregovaná data mít - nám budou stačit minuty, které si z intervalu vytáhneme pomocí date_part funkce.

SELECT SUM( date_part('hour', work.time_to - work.time_from)*60 + date_part('minute', work.time_to - work.time_from) ) FROM work WHERE id_worker = 1

Výsledkem bude double obsahující součet rozdílů časů v minutách.

Komentovat

Článek zatím nebyl komentován. Podělte se svým názorem.

Pole komentáře: zmenšit / zvětšit

Jméno:

Email: (Gravatar ID)

Web:

Barva trávy (otázka proti robotům):

© 2004-2012 Tom Hnatovsky - Všechna práva vyhrazena