Нужна помощь с округлением значений, я знаю, что ROUND() существует, но это не совсем то, что мне нужно.
Итак, я рассчитываю тарифы на звонки за минуту, при которых при фиксированной ставке любой звонок продолжительностью более 60 секунд будет взиматься плата за следующую минуту.
Мой запрос идет SEC_TO_TIME (billedsec), чтобы получить минутный эквивалент.
У меня 2 проблемы:
Как округлить до полной минуты для значений, которые превышают минуту, скажем, если 1 минута и 15 секунд (00:01:15) должны быть 2 минутами или 13 секунд должны быть полной минутой.
Как рассчитать формат TIME для int или float, чтобы получить фактическую скорость
например 00:01:00*rate? Это прямолинейный подход?
Спасибо, парни






Ты можешь использовать
FLOOR((billedsec+59)/60)
чтобы округлить время до следующей минуты. 13 секунд перейдут к 72/60 = 1 минуте, 60 секунд перейдут к 119/60 = 1 минуте, 61 секунда перейдет к 120/60 = 2 минутам, 75 секунд перейдет к 134/60 = 2 минутам и т. д.
Не волнуйтесь. Рад помочь.
Или просто CEIL(billedsec/60) @Nick?
@ Michael-sqlbot Да, но ... Иногда я сталкивался с ситуациями, когда ограничения точности с плавающей запятой означают, что что-то вроде 60/60 может быть дробно больше единицы, а затем CEIL округляет это до 2. Использование FLOOR таким образом гарантировано безопасный.
БЛАГОДАРЮ ВАС! Это сработало! МОЙ БОГ! ты сделал мою жизнь намного проще. ВВЕРХ ВВЕРХ ВВЕРХ!