|
Суммировать время в SQLITE
|
|||
---|---|---|---|
#18+
Всем доброго! Помогите пожалуйста с синтаксисом SELECT'а. Необходимо просуммировать время с группировкой. Делаю следующим образом: Код: plaintext 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2008, 08:45 |
|
Суммировать время в SQLITE
|
|||
---|---|---|---|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2008, 15:11 |
|
Суммировать время в SQLITE
|
|||
---|---|---|---|
#18+
Я так понял, что вычисление суммы времени нет. Может как-то можно тогда duration перевести в секунды (INTEGER), затем посчитать, а затем обратно преобразовать его в тип данных типа time? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2008, 16:29 |
|
Суммировать время в SQLITE
|
|||
---|---|---|---|
#18+
Bingo_BongoЯ так понял, что вычисление суммы времени нет. Может как-то можно тогда duration перевести в секунды (INTEGER), затем посчитать, а затем обратно преобразовать его в тип данных типа time?Начать надо с того, что типа данных time нет. Есть только строковое представление времени... Читай тут: http://www.sqlite.org/datatype3.html http://www.sqlite.org/lang_datefunc.html Подобную задачу можно в принципе решить вот так: Код: plaintext 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2008, 17:54 |
|
Суммировать время в SQLITE
|
|||
---|---|---|---|
#18+
White Owl Подобную задачу можно в принципе решить вот так: Код: plaintext 1. 2. 3. 4. 5.
Ей-ей, что за ужасы вы рассказываете. Достаточно поменять формат хранения времени с интервала ('00:01:02') на секунды ('00:01:02' = 62) и задача решается тривиально и без проблем с производительностью. В текущем варианте возникнут проблемы, например, при биллинговании только тех звонков, которые превышают нетарифицируемый интервал. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2008, 18:17 |
|
Суммировать время в SQLITE
|
|||
---|---|---|---|
#18+
MBGЕй-ей, что за ужасы вы рассказываете. Страшно? А что делать? MBGДостаточно поменять формат хранения времени с интервала ('00:01:02') на секунды ('00:01:02' = 62) и задача решается тривиально и без проблем с производительностью.Да, конечно, я на это и намекал, напоминая автору топика что в sqlite на самом деле нет типа данных time. Действительно хранить количество секунд намного удобнее, надежнее и проще со всех точек зрения. Но если таблица уже существует и уже содержит время в виде "времени"? Тогда и прийдется прибегать к кривым и страшным методам типа показаного ранее. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2008, 18:32 |
|
Суммировать время в SQLITE
|
|||
---|---|---|---|
#18+
Очень интересно. Значит я ввелся в заблуждение когда оформлял базу в SQLiteadmin'e там предлагают именно типы данных DATE и TIME. Тогда конечно лучше забивать время в секундах. Только как выводить его потом в нормальном для пользователя виде(%H:%M:%S) через SELECT разумеется? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2008, 19:50 |
|
Суммировать время в SQLITE
|
|||
---|---|---|---|
#18+
Bingo_BongoОчень интересно. Значит я ввелся в заблуждение когда оформлял базу в SQLiteadmin'e там предлагают именно типы данных DATE и TIME. Тогда конечно лучше забивать время в секундах. Только как выводить его потом в нормальном для пользователя виде(%H:%M:%S) через SELECT разумеется? Проще всего забиндить пользовательскую функцию, которая преобразует время для отображения: Код: plaintext 1. 2. 3. 4. 5. 6. 7.
Пример на тикле, но тоже самое можно сделать на любом языке. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2008, 02:04 |
|
Суммировать время в SQLITE
|
|||
---|---|---|---|
#18+
Bingo_BongoОчень интересно. Значит я ввелся в заблуждение когда оформлял базу в SQLiteadmin'e там предлагают именно типы данных DATE и TIME. Тогда конечно лучше забивать время в секундах. Только как выводить его потом в нормальном для пользователя виде(%H:%M:%S) через SELECT разумеется?А вот для этого как раз и существует функция time() Код: plaintext 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2008, 17:44 |
|
Суммировать время в SQLITE
|
|||
---|---|---|---|
#18+
MBGПроще всего забиндить пользовательскую функцию, которая преобразует время для отображения:А еще проще будет почитать список предопределенных функций: strftime(), time(), date(), datetime()... Они очень даже мощные :) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2008, 17:45 |
|
Суммировать время в SQLITE
|
|||
---|---|---|---|
#18+
White OwlОни очень даже мощные :) Это очень мягко сказано ! PS: Я хотел ответить выше аналогично, но уже все сказанно. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2008, 18:32 |
|
Суммировать время в SQLITE
|
|||
---|---|---|---|
#18+
White OwlMBGПроще всего забиндить пользовательскую функцию, которая преобразует время для отображения:А еще проще будет почитать список предопределенных функций: strftime(), time(), date(), datetime()... Они очень даже мощные :) В формат оракла и из формата оракла тем не менее проще преобразовывать пользовательской функцией. При желании форматировать, например, в виде "1 минута 5 секунд" - тоже. Не стоит забывать, что возможности встраиваемой СУБД легко расширяются функциями приложения. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2008, 20:51 |
|
Суммировать время в SQLITE
|
|||
---|---|---|---|
#18+
MBGВ формат оракла и из формата оракла тем не менее проще преобразовывать пользовательской функцией. Уточните пожалуйста что такое "формат оракла" и зачем в него преобразовывать при работе с sqlite? MBGПри желании форматировать, например, в виде "1 минута 5 секунд" - тоже. Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2008, 23:23 |
|
Суммировать время в SQLITE
|
|||
---|---|---|---|
#18+
White OwlMBGВ формат оракла и из формата оракла тем не менее проще преобразовывать пользовательской функцией. Уточните пожалуйста что такое "формат оракла" и зачем в него преобразовывать при работе с sqlite? Даты вида 1-APR-05, полученные при выгрузке из оракла. Преобразовывать понятно зачем - для оптимизации запросов по этим данным. Например, есть месячная выгрузка из биллинга, кидаем ее в эскулайт на отдельный сервер и пользователи могут строить любые отчеты в любом количестве, не перегружая основной биллинг. Благо сложные объединения таблиц эскулайт выполняет блестяще и данные хранит весьма компактно. White OwlMBGПри желании форматировать, например, в виде "1 минута 5 секунд" - тоже. Код: plaintext
И как при необходимости сменить форматирование вы поступите - будете по всему коду искать и заменять этот паттерн? Лучше создать функцию reportview для отображения даты в отчетах, к примеру, и вызывать ее во всех отчетах, тогда изменение формата отображения времени в отчетах потребует модификацию одной лишь функции. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2008, 02:42 |
|
Суммировать время в SQLITE
|
|||
---|---|---|---|
#18+
MBGДаты вида 1-APR-05, полученные при выгрузке из оракла.Ой, жуть какая! Ну да, такие даты действительно прийдется обрабатывать пользовательскими функциями. MBGИ как при необходимости сменить форматирование вы поступите - будете по всему коду искать и заменять этот паттерн? Лучше создать функцию reportview для отображения даты в отчетах, к примеру, и вызывать ее во всех отчетах, тогда изменение формата отображения времени в отчетах потребует модификацию одной лишь функции.Два пункта: - Формат представления даты для пользователя это чисто клиентская задача. И решать ее в любом случае будет ГУЙ. Движку БД клиентский формат данных глубоко по барабану, лично я с датами в БД работаю только в одном формате - yyyy-mm-dd. Все остальные форматы - известны только ГУЮ. - Ни разу не встречал задачу в которой по настоящему пришлось бы заниматься сменой формата даты. Если программа изначально готовится для международного рынка, значит i18n и подобные ему словари закладываются еще при старте проекта. И опять таки - язык приложения это чисто ГУЕвая задача. БД, будь она хоть трижды встраиваемой с форматами даты никак взаимодействовать не должна. Иначе при смене локали для ГУЯ старая база либо не сможет работать совсем, либо серьезно затормозиться потому что теперь ей прийдется тратить время на вызов каких-то внешний процедур коневертации данных. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2008, 17:47 |
|
Суммировать время в SQLITE
|
|||
---|---|---|---|
#18+
White OwlДва пункта: - Формат представления даты для пользователя это чисто клиентская задача. И решать ее в любом случае будет ГУЙ. Движку БД клиентский формат данных глубоко по барабану, лично я с датами в БД работаю только в одном формате - yyyy-mm-dd. Все остальные форматы - известны только ГУЮ. - Ни разу не встречал задачу в которой по настоящему пришлось бы заниматься сменой формата даты. Если программа изначально готовится для международного рынка, значит i18n и подобные ему словари закладываются еще при старте проекта. И опять таки - язык приложения это чисто ГУЕвая задача. БД, будь она хоть трижды встраиваемой с форматами даты никак взаимодействовать не должна. Иначе при смене локали для ГУЯ старая база либо не сможет работать совсем, либо серьезно затормозиться потому что теперь ей прийдется тратить время на вызов каких-то внешний процедур коневертации данных. Стандартная ситуация - приложение генерит sql-запрос, который потом автоматически мапится в отчет. Никакой дополнительной обработки не нужно, есть прямое соответствие таблица результата запроса - таблица/график/etc. отчета. Формат хранения даты в базе стандартный, секунды с начала эпохи юникс, а вот отображаться дата может в самом различном виде. Например, пользователи могут попросить, чтобы временной интервал меньше 3-х минут отображался как строка "отлично", до 10-ти минут - как "хорошо", и свыше этого - как "удовлетворительно". Базу менять не надо, приложение менять не надо, достаточно лишь изменить содержимое функции отображения даты. Раз мы можем функции приложения и СУБД запустить в едином адресном пространстве, не нужно делать дополнительную обработку после проведения выборки. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2008, 18:21 |
|
|
start [/forum/topic.php?fid=54&msg=35666148&tid=2009472]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
94ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
58ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 212ms |
0 / 0 |