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

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

Выборка данных за каждый месяци сумирование [D5, IB5.x]


Denis_Visma ©   (2004-04-09 14:48:00) 

Уважаемые! Как написать запрос, котороый бы покаждому дню месяца сумировал одно поле....если например за какой то день нее записей, то все равно он отображался в выборке спасибо...
select STAT_DAY, // поле по которому надо сделать ограничение на дату
SUM(SELF_MARK)
from statday


roottim   (2004-04-09 17:09:00) [1]

я конечно наверно лох по синтаксису ИБ, да и в оракле только в 9-ке появилис pipeline функции... но накидать примерно код могу.. только не сильно бейте
create pocedure days_of_month(p_month integer, p_year integer)
return (dmonth date)
as
begin
 -- вот это на pl
 for i in 1..lastday(to_date(p_month||'.'||p_year, 'mm.yyyy'))
 loop
   dmonth := to_date(i||'.'||p_month||'.'||p_year, 'dd.mm.yyyy');
   -- а это на isql
    suspend;
  -- и это на pl
  end loop;
end

звиняйте , но что смог вспомнить...

а затем соединям
select ... from ttt, days_of_month where dmonth = ttt.dayofmonth


Nikolay M.   (2004-04-09 16:05:00) [2]


> Johnmen ©   (09.04.04 15:58) [8]

Ну, я же и не претендую. Я с ИБ совсем немного работал и то давно. Главное: ход мысли передать :)
В MySQL, где формат даты-времени был, в основном "2004-09-04 16:04:00" помогал банальный кастинг в строку и Trim правых символов:
GROUP BY left(date_time, 10)


Johnmen   (2004-04-09 15:58:00) [3]

Не, ребята, с IB5 много не наработаешь...:)

>Nikolay M. ©   (09.04.04 15:32) [7]

А так можно наработать разве что с FB1.5
:)


Nikolay M.   (2004-04-09 15:32:00) [4]


> Соловьев ©   (09.04.04 15:05) [4]
> Только я как понял у автора поста - день храниться.

А, дошло. У него дата-время, а нужна группировка только по дате?
Немного доработаем:
SELECT sum(1), Extract(year from date_field) || Extract(month from date_field) || Extract(day from date_field)
FROM table_name
GROUP BY Extract(year from date_field) || Extract(month from date_field) || Extract(day from date_field)

Или вместо этого нагромождения Extract-ов сделать CAST(date_field AS date). Правда, не знаю, какой эффект будет иметь в ИБ, может есть более прямые функции для даты-времени.


Соловьев   (2004-04-09 15:11:00) [5]


> Denis_Visma   (09.04.04 15:06) [5]
> вы не могли бы написать эту самую ХП? буду очень благодарен

скоко у.е.? :)
Если серьезно, то ты же программист - пора и научится. Используй IBExpert(www.ibexpert.com - для нашего брата бесплатен) Там удобно писать ХП.


Denis_Visma   (2004-04-09 15:06:00) [6]

вы не могли бы написать эту самую ХП? буду очень благодарен


Соловьев   (2004-04-09 15:05:00) [7]


> Nikolay M. ©   (09.04.04 15:01) [3]
> В ИБ есть функции, извлекающие год и месяц?

есть extract(year from field )
    extract(month from field )
    extract(day from field )
Только я как понял у автора поста - день храниться.


Nikolay M.   (2004-04-09 15:01:00) [8]

В ИБ есть функции, извлекающие год и месяц?
Подозреваю, что есть. Попробуй что-то вроде
SELECT sum(1), ExtractYear(date_field) || ExtractMonth(date_field)
FROM table_name
GROUP BY ExtractYear(date_field) || ExtractMonth(date_field)
?


Соловьев   (2004-04-09 15:00:00) [9]


>  покаждому дню месяца сумировал одно поле....

select SUM(SELF_MARK)
from statday
where stat_day=your_day


Карелин Артем   (2004-04-09 14:54:00) [10]

Пиши хранимую процедуру, в ней цикл по перечислению месяцев. Внутри цикла делай SUM(SELF_MARK) и все.


Наверх

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