Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Хитрый запрос / 11 сообщений из 11, страница 1 из 1
18.08.2010, 15:42
    #36798105
eugene_crabs
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хитрый запрос
Добрый день. Мне нужно получить сумму столбцов за определенный период (см приложение). Сложность в том, что детализация может быть от минут до годов. Например мне нужно посчитать сумму за каждый месяц, а месяцев там может быть 100500. Приходится составлять список месяцев и делать запрос типа того, что на скриншоте.(ещё и потому что в результатах не должно быть дырок, например если после июня идет август то обязательно д.б. результат за июль, который будет = 0 ) Соответственно сильно страдает производительность. Нельзя ли это всё дело запихнуть в один запрос или как-то упростить это дело?
...
Рейтинг: 0 / 0
19.08.2010, 11:43
    #36799684
Alexbootch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хитрый запрос
Для того что бы что-то выбрать за определенный период времени - нужно для начала правильно записать дату и время:

YYYY-MM-DD HH:MM
...
Рейтинг: 0 / 0
19.08.2010, 15:04
    #36800422
eugene_crabs
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хитрый запрос
Alexbootch,

а по делу есть что?
...
Рейтинг: 0 / 0
19.08.2010, 15:18
    #36800500
Alexbootch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хитрый запрос
eugene_crabs, если хочешь получить ответ - выкладывай запросы на создание таблиц и наполнение их данными, т.к. в голове твои задачи никто решать не будет.
...
Рейтинг: 0 / 0
23.08.2010, 02:54
    #36805413
Tolka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хитрый запрос
Alexbootch всё верно сказал.

Если вы храните дату в формате yyyy-mm-dd hh24:mi:ss то выборка данных по периоду будет выполняться простым date_col > '2010-01-01' and date_col <= '2010-07-31'...

При этом не нужно вырисовывать лайки. Сравнение строк будет работать правильно.


Если нет данных - нужно их добавить с count = 0 - такого, насколько я знаю, в sqlite нет. Это в Oracle есть оператор MODEL, который позволяет "рисовать" данные, которых нет
...
Рейтинг: 0 / 0
27.08.2010, 08:22
    #36814513
eugene_crabs
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хитрый запрос
Хорошо, я исправил формат. Теперь как мне посчитать сумму столбца count1 за июль не используя лайк?
...
Рейтинг: 0 / 0
27.08.2010, 10:16
    #36814752
Alexbootch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хитрый запрос
eugene_crabsХорошо, я исправил формат. Теперь как мне посчитать сумму столбца count1 за июль не используя лайк?

Без LIKE ничего не получится, т.к. Вы хотели вывести сумму строки count1 за июнь без учета времени.
Вот так можно вывести:

Код: plaintext
SELECT sum(count1) FROM tablename WHERE "date" LIKE '2010-07-%';

Кроме того, нельзя использовать зарезервированное слово date в названия столбцов таблицы
...
Рейтинг: 0 / 0
04.09.2010, 02:54
    #36829449
Tolka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хитрый запрос
если дата будет храниться в обговоренном выше формате, то сумму за месяц (любой период) можно посчитать без like...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
sqlite> create table t (dt_system text);

sqlite> INSERT INTO t VALUES('2009.08.13 01:58:38');
sqlite> INSERT INTO t VALUES('2009.12.25 23:56:22');
sqlite> INSERT INTO t VALUES('2010.02.03 00:40:52');
sqlite> INSERT INTO t VALUES('2010.04.24 23:25:48');
sqlite> INSERT INTO t VALUES('2010.04.24 23:32:16');
sqlite> INSERT INTO t VALUES('2010.05.09 22:08:44');
sqlite> INSERT INTO t VALUES('2010.05.09 22:16:29');

sqlite> select * from t order by dt_system;
 2009 . 08 . 13   01 : 58 : 38 
 2009 . 12 . 25   23 : 56 : 22 
 2010 . 02 . 03   00 : 40 : 52 
 2010 . 04 . 24   23 : 25 : 48 
 2010 . 04 . 24   23 : 32 : 16 
 2010 . 05 . 09   22 : 08 : 44 
 2010 . 05 . 09   22 : 16 : 29 

sqlite> select dt_system from t where dt_system >= '2010.03.01';
 2010 . 04 . 24   23 : 25 : 48 
 2010 . 04 . 24   23 : 32 : 16 
 2010 . 05 . 09   22 : 08 : 44 
 2010 . 05 . 09   22 : 16 : 29 

sqlite> select dt_system from t where dt_system >= '2010.03.01' and dt_system < '2010.05.01';
 2010 . 04 . 24   23 : 25 : 48 
 2010 . 04 . 24   23 : 32 : 16 
...
Рейтинг: 0 / 0
04.09.2010, 12:21
    #36829527
eugene_crabs
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хитрый запрос
Спасибо, я попробую сделать так. Хотелось бы ещё узнать как сильно LIKE влияет на производительность. Если я использую sum и like одновременно, то при не очень большой базе время извлечения составляет примерно 10мс, что слишком медленно для меня.
...
Рейтинг: 0 / 0
05.09.2010, 03:43
    #36830020
ПЕНСИОНЕРКА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хитрый запрос
eugene_crabs,

автордетализация может быть от минут до годов. Например мне нужно посчитать сумму за каждый месяц, а месяцев там может быть 100500. Приходится составлять список месяцев и делать запрос типа того, что на скриншоте.(ещё и потому что в результатах не должно быть дырок, например если после июня идет август то обязательно д.б. результат за июль, который будет = 0 )

на эти вопросы я что-то не заметила ответов......
...
Рейтинг: 0 / 0
06.09.2010, 11:02
    #36831037
eugene_crabs
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хитрый запрос
ПЕНСИОНЕРКА,

Я тоже. Проблему решил сам, нужно было всего лишь воспользоваться оператором GROUP BY. Тему можно закрывать.
...
Рейтинг: 0 / 0
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Хитрый запрос / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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