Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Дискретное значение сумм по месяцам. [D5, IB6.x]


-=Sergeante=- ©   (2002-11-22 17:49:00) 

Великикие Программеры, есть вопрос по SQL. Скажем, есть некая таблица (ID, ДАТА ОПЕРАЦИИ, СТОИМОСТЬ). Чтобы просумировать в определённом промежутке я делаю BEETWEEN дата начала and дата конца :)
Но вот незадача (не для Вас естесственно), как получить эн-ное кол-во записей, чтобы каждая была суммой за ОДИН месяц.
Т.е. я полагаю, что надо выполнять несколько запросов, и в каждам приращение на 1 месяц:
between"01.01.2001" and"01.02.2001"
between"01.02.2001" and"01.03.2001"
between"01.03.2001" and"01.04.2001"
и т.д.

Можно ли как нить это загнать в ХП, чтоб она мне всё красиво сделала?

Собственно, всё это нужно для анализа динамики продаж и построения графиков для наглядности.
Спасибо.


-=Sergeante=-   (2002-11-27 14:30:00) [1]

Сдалал. Работает великолепно. Всем спасибо.


-=Sergeante=-   (2002-11-27 09:24:00) [2]


> Карелин Артем © (26.11.02 09:35)
> Копай в сторону Extract(year,month и так далее.)


Уже. Спасибо.


> sniknik © (26.11.02 10:54)
> тогда уж YYYYMM, сортировка будет "правильной".


Уже догнал :)


sniknik   (2002-11-26 10:54:00) [3]

-=Sergeante=- © (26.11.02 09:28)
>создам .. Даже одно поле MMYYYY
тогда уж YYYYMM, сортировка будет "правильной".


Карелин Артем   (2002-11-26 09:35:00) [4]

Копай в сторону Extract(year,month и так далее.) это позволяет работать с датой внутри ХП.
А еще на сайте Ibase.ru есть материалы по работе с датой через UDF и хранимые процедуры для различных действий с датой.


-=Sergeante=-   (2002-11-26 09:28:00) [5]


> Alexandr © (26.11.02 08:09)
> 1) Calculated поле даст тормоза на селекте каждый раз, триггерное
> поле - на изменении один раз и с ним гемора больше. Смотри,
> что для тебя важнее.


Думаю, сделаю как ты посоветовал, создам пару лишних полей и буду заполнять их триггером. Даже однополе MMYYYY. И думаю с триггером гемора никакого не будет. Один раз написал, а остальное он сам всё сделает.

Спасибо всем за советы.


Alexandr   (2002-11-26 08:09:00) [6]

1) Calculated поле даст тормоза на селекте каждый раз, триггерное поле - на изменении один раз и с ним гемора больше. Смотри, что для тебя важнее.
2) Группировка по функциям еть далеко не но всех версиях (и в IB клонах только в Yaffil, по-моему), и уж индексы тут пролетают точно.


BlackTiger   (2002-11-23 15:31:00) [7]

Я тут выкладывал как-то текст ХП для MSSQL (crosstab, pivot).
Может его можно адаптировать для IB.

Может в IB есть свои средства (SQL-команды) для "перевертышей", как у MSAccess?


sniknik   (2002-11-23 15:20:00) [8]

Почему нельзя сделать групировку по месяцам?
типа
SELECT SUM(Quantity),SUM(Sum),Min(CustomerID) FROM Invoices GROUP BY Month(OrderDate)
ну конечно и год надо включать.

и кстати если делать по
between "01.01.2001" and "01.02.2001"
between "01.02.2001" and "01.03.2001"
between "01.03.2001" and "01.04.2001" и т.д.
будет ошибка, between берет значения включительно. т.е. надо
between "01.01.2001" and "31.01.2001"
и т.д.

извиняюсь что влез (с IB не дружу :-), пример для MSSQL.
в IB так нельзя?


-=Sergeante=-   (2002-11-23 14:57:00) [9]


> Alexandr © (23.11.02 08:07)
> но если хочется быстро и не жалко несколько лишних байтов
> в базе данных, то создай поля в таблице число, месяц, год...
> Заполняй их триггерами, а потом при селекте группировку
> по ним делай.
> Летать будет.


Это идея. А если сделать CALCULATED-поле на стороне сервера? Производительность упадёт сильно?


Alexandr   (2002-11-23 08:07:00) [10]

но если хочется быстро и не жалко несколько лишних байтов в базе данных, то создай поля в таблице число, месяц, год...
Заполняй их триггерами, а потом при селекте группировку по ним делай.
Летать будет.


Johnmen   (2002-11-23 01:17:00) [11]

См. в сторону UNION и функции extract


MOA   (2002-11-22 20:22:00) [12]

Попробуйте завести таблицу с границами месяцев, затем JOIN с этой таблицей. Конечно, не стоит забывать о високосных годах.
Удачи!


-=Sergeante=-   (2002-11-22 18:44:00) [13]

Нет других вариантов, кроме как перебором в цикле? Может можно группировкой как-нибудь?


3JIA9I CyKA   (2002-11-22 18:31:00) [14]

да


Наверх

Титульная страница Поиск, карта сайта Написать письмо