Округление времени до секунд (Qlikview)

Автор d.pimkin, 29 февраля 2016, 02:05:49

« назад - далее »

d.pimkin

Всем доброго времени суток!

Столкнулся со следующей проблемой: собираю уникальные (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;

Не помогает.

admin

Привет, время время может хранится числом секунд, миллисекунд , наносекунд.
Выясните как хранится время в источнике, какое число соответствует какой дате.
И если оно не в секундах, то потребуется избавиться от лишних мгновений, разделить на 10 в какой-нибудь степени и дальше работать с округленным, целым числом.


Яндекс.Метрика