Вниз
Скачать: CL | DM;

Дата в IB   Найти похожие ветки 

← →
msguns ©   (2005-02-18 11:43) [0]

Вот такая проблема: в IB (1) есть формат данных Data, где хранится не только число (дд.мм.гггг), но и время (чч.мм.сс)
Выборки по датам решаются простым диапазоном типа
1.01.2005 00:00:00 - 31.03.2005 23:59:59

Но !!! Есть задачки, где надо выбирать по дням. Например, при сводке статистики прокси надо получить сводные данные о том, сколько каждый клиент юзал инет в днях.
Напрямую запросом вытащить эту инфу из конвертенного сквид-лога нельзя (по крайней мере у меня это не вышло). В рез-те написать ХП, которая выбирает из лога записи за период, прикручивая к вых.НД YEAR, MONTH и DAY, а потом уж со всей этой фигней идут подсчеты. Однако все считается так долго, что нету никакой мочи терпеть (записей в конвертенном логе сотни тысяч).
В результате не придумал ничего лучше, как прикрутить к ибэшной таблице лога доп. чар-поле, куда при конверте вкачиваю дату по шаблону DDMMYYYY. После этого все должно бегать быстрее.
А как использовать дату в натуральном виде ?


← →
Johnmen ©   (2005-02-18 11:51) [1]

Серёга, CAST(D2-D1-0.5 AS INT), количество полных дней между...


← →
msguns ©   (2005-02-18 12:06) [2]

>Johnmen ©   (18.02.05 11:51) [1]

Не понял я, Жень ;(

пример?:

192.168.42.1  12.01.2005 08:20:35
192.168.42.1  12.01.2005 08:20:38
192.168.42.1  12.01.2005 08:24:29
192.168.42.1  12.01.2005 08:28:51
  ...
192.168.42.1  13.01.2005 08:20:35
192.168.42.1  13.01.2005 08:20:38
192.168.42.1  13.01.2005 08:24:29
192.168.42.1  13.01.2005 08:28:51
 

Надо получить:
192.168.42.1  2


← →
ЮЮ ©   (2005-02-18 12:12) [3]

SELECT
 IpAddress, COUNT (DISTINCT CAST(ConnectionTime AS int))
GROUP BY
 IpAddress


← →
Domkrat ©   (2005-02-18 12:21) [4]

as Date


← →
Johnmen ©   (2005-02-18 12:23) [5]

>ЮЮ ©   (18.02.05 12:12) [3]

Дата не кастуется к численным типам !!!

>msguns ©   (18.02.05 12:06) [2]

SELECT
IpAddress, COUNT (DISTINCT CAST(ConnectionTime-(CAST("01.01.1900" AS DATE)) AS int))
GROUP BY
IpAddress


← →
Johnmen ©   (2005-02-18 12:24) [6]

>Domkrat ©   (18.02.05 12:21) [4]

См. вопрос - 1 диалект !!!


← →
msguns ©   (2005-02-18 12:26) [7]

>ЮЮ ©   (18.02.05 12:12) [3]

Overflow occured during data type convertion.
conversion error from string "21-JAN-2005 11:46:04.0000".

Даты, ессно, корректны


← →
P.N.P. ©   (2005-02-18 12:39) [8]

SELECT
IpAddress,cast(max(ConnectionTime)-min(ConnectionTime)+0.5 as integer)
GROUP BY
IpAddress


← →
Johnmen ©   (2005-02-18 12:47) [9]

>P.N.P. ©   (18.02.05 12:39) [8]

Ню-ню, как говорят некоторые...:)


← →
P.N.P. ©   (2005-02-18 12:53) [10]

>Johnmen ©   (18.02.05 12:47) [9]
>Ню-ню,
что ню? Я где-то неправ?


← →
msguns ©   (2005-02-18 12:54) [11]

Жень, а как вывести просто дату ?


← →
ЮЮ ©   (2005-02-18 12:55) [12]

>conversion error from string "21-JAN-2005 11:46:04.0000".

Ну так, блин, кто думал, что и ты дату в символьном виде хранить будешь :)
Тогда

SELECT
IpAddress, COUNT (DISTINCT CAST(CAST(ConnectionTime AS dattime) as int)
GROUP BY
IpAddress


← →
Johnmen ©   (2005-02-18 12:58) [13]

>ЮЮ ©   (18.02.05 12:55) [12]

Да не хранит он дату в символьном виде !!!
Ещё раз [5]

>P.N.P. ©   (18.02.05 12:53) [10]

Конечно. В том, что привёл...

>msguns ©   (18.02.05 12:54) [11]

Куда вывести, Серёга ?


← →
ЮЮ ©   (2005-02-18 13:11) [14]

>Дата не кастуется к численным типам !!!
а (дата - дата) уже кастуется [5]???
Странный всё-таки этот ваш IB :)


← →
Danilka ©   (2005-02-18 13:18) [15]

[14] ЮЮ ©   (18.02.05 13:11)
дата минус дата будет число, где целая часть - дни, дробная - разница во времени.
И не только в ИБ, но и в МССкуле и в Орокле


← →
Johnmen ©   (2005-02-18 13:21) [16]

>ЮЮ ©   (18.02.05 13:11) [14]

Ничего странного, а всё ОЧЕНЬ логично и осознаваемо.
Есть даты а есть временные интервалы. Это СОВЕРШЕННО разные "субстанции".


← →
ЮЮ ©   (2005-02-18 13:24) [17]

А просто дата - это не число, где целая часть - дни, дробная - времени оттситываемое от некоторой "начальной даты"?

В МS SQL можно от даты и число отнимать, не только дату


← →
ЮЮ ©   (2005-02-18 13:27) [18]

>Есть даты а есть временные интервалы

Дата, между прочим, есть временной интервал от дня, от которого ведется летоисчисление.


← →
Johnmen ©   (2005-02-18 13:30) [19]

>ЮЮ ©  

Что такое дата ? Это количество некоторых единиц от точки отсчета. Точка отсчета м.б. где угодно, и на неё в продуманных системах не закладываются.
Значит, допустимы операции вычитания дат (= интервал), сложение/вычитание из дат интервалов.


← →
Danilka ©   (2005-02-18 13:30) [20]

[17] ЮЮ ©   (18.02.05 13:24)
> В МS SQL можно от даты и число отнимать, не только дату

Думаецца, везде так можно, по крайней мере в Орокле точно. Там вообще, в отличие от МССкуля (здесь смайлик), для работы с датой есть удобные функции, например TRUNC для дат отсекает время, а вот-так: TRUNC(какая_то_дата, "MM") возвращает первый день месяца. :))


← →
msguns ©   (2005-02-18 13:36) [21]

>Johnmen ©   (18.02.05 12:23) [5]

Запрос по этой рыбе дает нерегулярную ошибку. Т.е. на проверенных мною 12 ключах (значения заголовков, в моем случае это пара IP + NODEURL) правильно досчитано кол-во дней у 11, а у одного вместо 20 реальных выдало 17 ;(

Еще раз уточню: мне не надо количество дней в интервале времени как период в днях ! Мне надо просто сколько дней (дат) данный узер (IP) шарился по данному домену (NODEURL). В смысле если в месяце всего 22 дня (рабочих), а узер лазил туда 3, 6 и 10 (по барабану сколько раз и в какое время), чтоб запрос мне выдал 3

>P.N.P. ©   (18.02.05 12:39) [8]

Сейчас попробую твой вариант (пришла уборщица и выгоняет - пойду подышу в "палочку здоровья") ;)


← →
msguns ©   (2005-02-18 13:42) [22]

>P.N.P. ©   (18.02.05 12:53) [10]
>что ню? Я где-то неправ?

Неправ. Не прочитал или недопонял условие. См.[21]


← →
ЮЮ ©   (2005-02-18 13:45) [23]

>Т.е. на проверенных мною 12 ключах

Плох проверял. Напиши
SELECT DISTINCT <проходящий вариант преобразования даты в целое>
FROM table
WWHRE ip = <Ip вызывающий сомнение>

и подсчитай


← →
Johnmen ©   (2005-02-18 13:48) [24]

>msguns ©   (18.02.05 13:36) [21]

SELECT UserField,
 COUNT(DISTINCT EXTRACT(MONTH FROM DateField)+
                EXTRACT(YEAR FROM DateField)*100)
FROM Table
WHERE ...
GROUP BY UserField


← →
msguns ©   (2005-02-18 13:53) [25]

Вот это прокатило на уря:

SELECT L.sqip, L.sqnodurl,
 COUNT (DISTINCT CAST(EXTRACT(YEAR FROM L.sqtime)*10000+
        EXTRACT(MONTH FROM L.sqtime)*100+
        EXTRACT(DAY FROM L.sqtime) as INT)),
 COUNT (DISTINCT L.squrl), COUNT(L.sqtime), SUM(L.sqpsize)
 FROM sqlog L
 GROUP BY L.sqip, L.sqnodurl
 ORDER BY L.sqip, L.sqnodurl


← →
msguns ©   (2005-02-18 13:55) [26]

>Johnmen ©   (18.02.05 13:48) [24]

Запостился, потом увидел твой ;))


← →
msguns ©   (2005-02-18 17:04) [27]

Большое спасибо всем.
Особенно Johnmen © :)



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.51 MB
Время: 0.024 c
1-1109865606
sloug
2005-03-03 19:00
2005.03.20
ToolBar меняет цвет


3-1108911051
Dell3r
2005-02-20 17:50
2005.03.20
NetWork


3-1108633079
kblc
2005-02-17 12:37
2005.03.20
Access and LoginScreen


1-1109747467
GH@ST
2005-03-02 10:11
2005.03.20
Нужна функция перекодирования строки из win в dos


14-1109712743
Andryk
2005-03-02 00:32
2005.03.20
Я се стрим поставил. Эх лепота!!!




   Наверх