Всем доброго времени суток!
Столкнулся со следующей проблемой: собираю уникальные (distinct) значения даты-времени (timestamp) из разных источников в одну таблицу с полями "host" и "event_date". Затем привожу ее к виду "host", "event_date_from", "event_date_to" следующим скриптом:
LOAD
host_name,
event_date_from,
event_date_to,
Interval(event_date_to-event_date_from,'hh:mm:ss') as event_duration;
LOAD
host,
Timestamp(event_date) as event_date_from,
Timestamp(If(Previous(host)=host,Previousevent_date)-(1/86400),'$(vNow)')) as event_date_to
Resident events
Order By host, event_date desc;
Т.е. в отсортированной по дате (по убыванию) таблице, для каждого события, в качестве event_date_to беру предыдущий event_date и вычитаю из него секунду. Для самого последнего события event_date_to равняется текущему времени.[/code]
Так вот, не смотря на то, что беру уникальные значение по Timestamp (SET TimestampFormat='DD.MM.YYYY hh:mm:ss'), закрадываются такие значения, которые в числовом представлении отличаются на миллисекунды, а timestamp у них одинаковый. Из-за чего, после преобразования точность event_duration равна миллисекундам, т.е. есть значения менее секунды или между секундами. Из-за этого, в свою очередь, появляются одинаковые event_duration в формате 'hh:mm:ss', однако разные в номерном представлении.
Откуда берутся миллисекунды? Я уже пытался все округлять до секунд путем LOAD
host_name,
Timestamp(Floor(event_date_from*86400)/86400) as event_date_from,
Timestamp(Floor(event_date_to*86400)/86400) as event_date_to;
Не помогает.
Привет, время время может хранится числом секунд, миллисекунд , наносекунд.
Выясните как хранится время в источнике, какое число соответствует какой дате.
И если оно не в секундах, то потребуется избавиться от лишних мгновений, разделить на 10 в какой-нибудь степени и дальше работать с округленным, целым числом.