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

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

а по делу есть что?
...
Рейтинг: 0 / 0
Хитрый запрос
    #36800500
Alexbootch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eugene_crabs, если хочешь получить ответ - выкладывай запросы на создание таблиц и наполнение их данными, т.к. в голове твои задачи никто решать не будет.
...
Рейтинг: 0 / 0
Хитрый запрос
    #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
Хитрый запрос
    #36814513
eugene_crabs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хорошо, я исправил формат. Теперь как мне посчитать сумму столбца count1 за июль не используя лайк?
...
Рейтинг: 0 / 0
Хитрый запрос
    #36814752
Alexbootch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eugene_crabsХорошо, я исправил формат. Теперь как мне посчитать сумму столбца count1 за июль не используя лайк?

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

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

Кроме того, нельзя использовать зарезервированное слово date в названия столбцов таблицы
...
Рейтинг: 0 / 0
Хитрый запрос
    #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
Хитрый запрос
    #36829527
eugene_crabs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, я попробую сделать так. Хотелось бы ещё узнать как сильно LIKE влияет на производительность. Если я использую sum и like одновременно, то при не очень большой базе время извлечения составляет примерно 10мс, что слишком медленно для меня.
...
Рейтинг: 0 / 0
Хитрый запрос
    #36830020
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eugene_crabs,

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

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

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


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