How I can round to nearest X minutes?
Here\'s my attempt:
DECLARE
_stamp ALIAS FOR $1; -- timestamp
_nearest ALIAS FOR $2; -- minutes (integer)
This seems to work:
DECLARE
_stamp ALIAS FOR $1;
_nearest ALIAS FOR $2;
_seconds integer;
_ret timestamp;
_minutes decimal;
_mod decimal;
BEGIN
_ret := date_trunc('minute', _stamp);
SELECT EXTRACT (minute FROM _ret)::integer INTO _minutes;
_mod := _minutes % _nearest;
IF (_mod > (_nearest / 2)) THEN
RETURN _ret + (_nearest - _mod) * interval '1 minute';
ELSE
RETURN _ret - (_mod) * interval '1 minute';
END IF;
RETURN _ret;
END;
Thanks to Stephen Denne :)