Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2005.03.20;
Скачать: [xml.tar.bz2];

Вниз

Дата в 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 вся ветка

Форум: "Базы";
Текущий архив: 2005.03.20;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.095 c
3-1108627893
Innuendo
2005-02-17 11:11
2005.03.20
Тип данных параметра запроса для char(firebird) и varchar2(ora9)


3-1108438042
папик
2005-02-15 06:27
2005.03.20
Лог SQL запросов к MS SQL


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


14-1109665646
boriskb
2005-03-01 11:27
2005.03.20
Рекомендуется к прочтению


14-1109285890
Vasya.ru
2005-02-25 01:58
2005.03.20
Пятничные задачки или типа того





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский