Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / cast от даты / 22 сообщений из 22, страница 1 из 1
22.04.2014, 15:49:00
    #38621740
green_mc
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cast от даты
Доброго времени суток!
Мне трудно дается файербердовский сиквел, не могли бы вы покритиковать запрос.
Задача такая. Есть две таблицы S1 и T1 связанные по ID, в каждой из этих таблиц есть поле DATA1, которое имеет вид
"dd.mm.yyyy hh:mi:ss". так вот нужно выкатить разницу времени S1.data1 и T1.data1 по общему ID.
в документации прочитал про возможность преобразования CAST, прикинл запрос такого вида

Код: sql
1.
2.
3.
4.
5.
6.
select
cast (s1.data1 as integer) -
cast (t1.data1 as integer)
from s1,t1
where s1.id= t1.id
and s1.data1 between '01.01.2014' and '01.02.2014'



подскажите в какую сторону копать?
...
Рейтинг: 0 / 0
22.04.2014, 15:53:33
    #38621753
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cast от даты
дата в инт не кастится.
нигде ты этого "прочесть" не мог.

зы: нужна разность - просто сделай вычитание.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
22.04.2014, 15:56:24
    #38621762
anpl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cast от даты
Улыбнул :)

Код: sql
1.
cast (a as date) - cast(b as date)
...
Рейтинг: 0 / 0
22.04.2014, 15:56:57
    #38621764
m7m
m7m
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cast от даты
Ну как-то так
Код: sql
1.
2.
3.
4.
5.
select
s1.data1-t1.data1
from s1,t1
where s1.id= t1.id
and s1.data1 between '01.01.2014' and '01.02.2014'



ps/ тынц
...
Рейтинг: 0 / 0
22.04.2014, 16:10:24
    #38621794
green_mc
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cast от даты
Спасибо всем . буду дальше ковырять
...
Рейтинг: 0 / 0
22.04.2014, 17:26:46
    #38621935
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cast от даты
green_mcесть поле DATA1, которое имеет вид "dd.mm.yyyy hh:mi:ss".
подскажите в какую сторону копать?
Как насчёт копать под того идиота, который решил хранить дату в виде строки?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
22.04.2014, 17:50:23
    #38621982
green_mc
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cast от даты
Dimitry Sibiryakov,

Под него хрен копнешь))
Для того же Оракла - это реальный формат даты. а вот с Файербердом у меня возникают проблемы!
...
Рейтинг: 0 / 0
22.04.2014, 17:52:34
    #38621985
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cast от даты
Dimitry Sibiryakov,

Та не, о скорее всего на TIMESTAMP поле смотрит... Хотя бывают конечно и альтернативно одаренные личности.
...
Рейтинг: 0 / 0
22.04.2014, 17:59:37
    #38621997
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cast от даты
green_mcДля того же Оракла - это реальный формат даты.
Ты не поверишь, но Оракул тоже хранит дату в двоичном формате, без всяких "dd.mm.yyyy".
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
22.04.2014, 18:01:49
    #38622003
anpl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cast от даты
green_mcДоброго времени суток!
Мне трудно дается файербердовский сиквел, не могли бы вы покритиковать запрос.
Задача такая. Есть две таблицы S1 и T1 связанные по ID, в каждой из этих таблиц есть поле DATA1, которое имеет вид
"dd.mm.yyyy hh:mi:ss". так вот нужно выкатить разницу времени S1.data1 и T1.data1 по общему ID.
в документации прочитал про возможность преобразования CAST, прикинл запрос такого вида

Код: sql
1.
2.
3.
4.
5.
6.
select
cast (s1.data1 as integer) -
cast (t1.data1 as integer)
from s1,t1
where s1.id= t1.id
and s1.data1 between '01.01.2014' and '01.02.2014'



подскажите в какую сторону копать?

я впервые вижу что бы кто то, дату пытался в инт всунуть, а потом еще какую то арифметику делал ))))
пс: не знаю какая задача стоит, но данные желательно обрабатывать на уровне клиента, с базы простыми селектами выбираешь данные... а на уровне клиента обрабатывай как нравится, группируй, сортируй, отнимай, прибавляй, выбирай среднее значение и т.д... агрегатные функции это круто, но при большом объеме данных может немного сервер пригрузить, особенно при группировке потом вычислениях, а потом чтоб мало не казалось еще сортировке )))

и старайся избавляться от скрытых джоинов
from s1,t1
в разы быстрей будет выполнятся
Код: sql
1.
2.
3.
4.
select s1.data1-t1.data1 /*если требуется дата вместо числа тогда s1.data1-(s1.data1-t1.data1) */
from s1
left join t1 on t1.id=s1.id
where s1.data1 between '01.01.2014' and '01.02.2014'
...
Рейтинг: 0 / 0
22.04.2014, 18:11:33
    #38622016
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cast от даты
anpl,

Ну тут ты погорячился. Почитай, как дата хранится.
...
Рейтинг: 0 / 0
22.04.2014, 18:21:05
    #38622025
anpl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cast от даты
DarkMasteranpl,

Ну тут ты погорячился. Почитай, как дата хранится.

каст добавить не проблема!)))
...
Рейтинг: 0 / 0
22.04.2014, 18:23:02
    #38622027
m7m
m7m
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cast от даты
anplи старайся избавляться от скрытых джоинов
from s1,t1
в разы быстрей будет выполнятся
Код: sql
1.
2.
3.
4.
select s1.data1-t1.data1 /*если требуется дата вместо числа тогда s1.data1-(s1.data1-t1.data1) */
from s1
left join t1 on t1.id=s1.id
where s1.data1 between '01.01.2014' and '01.02.2014'



и не смущает что исходный запрос и запрос приведенный тобой это совсем разные запросы??
...
Рейтинг: 0 / 0
22.04.2014, 18:31:47
    #38622038
anpl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cast от даты
m7manplи старайся избавляться от скрытых джоинов
from s1,t1
в разы быстрей будет выполнятся
Код: sql
1.
2.
3.
4.
select s1.data1-t1.data1 /*если требуется дата вместо числа тогда s1.data1-(s1.data1-t1.data1) */
from s1
left join t1 on t1.id=s1.id
where s1.data1 between '01.01.2014' and '01.02.2014'



и не смущает что исходный запрос и запрос приведенный тобой это совсем разные запросы??
что за таблицы у него я без понятия, вполне возможно left join там не катит... спорить не буду!
...
Рейтинг: 0 / 0
22.04.2014, 18:54:22
    #38622071
WildSery
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cast от даты
Перестаньте уже писать
Код: sql
1.
where s1.data1 between '01.01.2014' and '01.02.2014'

Пишите
Код: sql
1.
where s1.data1 between date '01.01.2014' and date '01.02.2014'

Ну или хотя бы
Код: sql
1.
where s1.data1 between cast('01.01.2014' as date) and cast('01.02.2014' as date)


Неявные преобразования вас когда-нибудь подставят.

anplданные желательно обрабатывать на уровне клиента, с базы простыми селектами выбираешь данные... а на уровне клиента обрабатывай как нравится, группируй, сортируй, отнимай, прибавляй, выбирай среднее значение и т.д... агрегатные функции это круто, но при большом объеме данных может немного сервер пригрузить, особенно при группировке потом вычислениях, а потом чтоб мало не казалось еще сортировке )))Ну то есть все функции SQL-сервера, под которые собственно он заточен, нафиг, лучше на клиенте в гигабайтах ковыряться.
...
Рейтинг: 0 / 0
22.04.2014, 19:09:48
    #38622095
anpl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cast от даты
WildSeryПерестаньте уже писать
Код: sql
1.
where s1.data1 between '01.01.2014' and '01.02.2014'

Пишите
Код: sql
1.
where s1.data1 between date '01.01.2014' and date '01.02.2014'

Ну или хотя бы
Код: sql
1.
where s1.data1 between cast('01.01.2014' as date) and cast('01.02.2014' as date)


Неявные преобразования вас когда-нибудь подставят.

Согласен! =)
WildSeryНу то есть все функции SQL-сервера, под которые собственно он заточен, нафиг, лучше на клиенте в гигабайтах ковыряться.
буду спорить :) Особенно по поводу ковыряния в гигабайтах! Где от за сотню конектов...
Если такой бред запустит один пользователь, пол беды... Но как показывает практика, если на уровне сервера все это решать... и десяток человек запустит подобные отчеты, остальные 90 человек это на себе почувствуют! :) Это факт... Так же как и то, что 10 отчетов выкрутятся намного быстрей с относительно легкими селектами и обработкой на клиенте чем все 10 отчетов будет маслать сервер!
По этому обращение к серверу лучше делать легкими селектами, а на клиенте ковырять эти данные. Хотя опять же таки в зависимости от того какая задача, далеко не всегда получается все делать на уровне клиента...
...
Рейтинг: 0 / 0
22.04.2014, 19:45:18
    #38622136
m7m
m7m
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cast от даты
anplWildSeryНу то есть все функции SQL-сервера, под которые собственно он заточен, нафиг, лучше на клиенте в гигабайтах ковыряться.
буду спорить :) Особенно по поводу ковыряния в гигабайтах! Где от за сотню конектов...
Если такой бред запустит один пользователь, пол беды... Но как показывает практика, если на уровне сервера все это решать... и десяток человек запустит подобные отчеты, остальные 90 человек это на себе почувствуют! :) Это факт... Так же как и то, что 10 отчетов выкрутятся намного быстрей с относительно легкими селектами и обработкой на клиенте чем все 10 отчетов будет маслать сервер!
По этому обращение к серверу лучше делать легкими селектами, а на клиенте ковырять эти данные. Хотя опять же таки в зависимости от того какая задача, далеко не всегда получается все делать на уровне клиента...
В данном случае у меня совершенно противоположное мнение
(правда за сотню коннектов нет у нас, да и до сотни у нас резерв еще приличный есть)
ну конечно согласен, что очень многое зависит от решаемой задачи, да еще и от "привычки"
...
Рейтинг: 0 / 0
22.04.2014, 19:49:39
    #38622144
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cast от даты
anpl,

Все зависит от задачи, от данных, от их обьема,и от необходимости поддерживать данные в актуальном состоянии на определенный момент времени. Например для некоторых видов аналитики действительно проще выгрузить что-то на клиента во временное хранилище (типа embeded db) и там крутить их до посинения (клиента). Для более других задач - такой подход не сработает ни разу.
...
Рейтинг: 0 / 0
22.04.2014, 19:57:06
    #38622152
anpl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cast от даты
Само собой что от задач все зависит, я говорил по возможности :) Это не значит что давай теперь вместо for select внутри процедуры, делать выборку, обрабатывать на клиенте и возвращать данные в какую то процедуру и там апдейтить и т.д... В крайности ударятся не стоит ))))
...
Рейтинг: 0 / 0
22.04.2014, 20:08:51
    #38622169
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cast от даты
DarkMasterдля некоторых видов аналитики действительно проще выгрузить что-то на
клиента во временное хранилище (типа embeded db) и там крутить их до посинения
(клиента)
Вроде как нынче модно для аналитики выгружать данные на отдельный сервер в отдельную базу
с кучей хранимых агрегатов и называть это красивой аббревиатурой "OLAP".
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
22.04.2014, 20:52:45
    #38622191
oleg_m
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cast от даты
Dimitry SibiryakovDarkMasterдля некоторых видов аналитики действительно проще выгрузить что-то на
клиента во временное хранилище (типа embeded db) и там крутить их до посинения
(клиента)
Вроде как нынче модно для аналитики выгружать данные на отдельный сервер в отдельную базу
с кучей хранимых агрегатов и называть это красивой аббревиатурой "OLAP".

+1. Только настоящая база ОЛАП очень сильно отличается от "обычной" реляционной базы. У нее физическая структкра другая.
Востребованные аггрегаты может делать сама.
И заточена для получения многомерных резалтсетов, в отличие от обычных SQL-запросов, с их фискированным кол-вом столбцов в запросе.
...
Рейтинг: 0 / 0
22.04.2014, 22:48:36
    #38622264
anpl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cast от даты
Как всегда, начали за здравие, а кончили за упокой.
Я не говорил за отдельные базы которые хранятся на отдельных серверах и т.д... Что касается куба, реализовать OLAP систему никто не мешает на уровне реалиционной бд и клиента. Опять же таки по тому же принципу. Но здесь нужно понимать что данные должны хранится в некой таблице в развернутом виде. И получать доступ к этим данным обычной выборкой легко и быстро! А на уровне клиента обрабатывать эти данные в зависимости от того, что пользователь хочет увидеть. Я веду к тому что никто не запрещает создать на уровне клиента некий модуль который будет формировать и отправлять запросы на сервер к некой таблице в зависимости от того что хочет юзер, возвращать данные и обрабатывать данные. Не буду углубляться в подробности, так как от основной темы это уже ушло далеко :)
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / cast от даты / 22 сообщений из 22, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]