просуммировать за день
От: Рома Мик Россия http://romamik.com
Дата: 02.11.04 14:22
Оценка:
Привет всем. Это опять ламернутый в отношении баз данных я

Есть таблица в которой записаны данные о покупке и продаже разных объектов, ну типа:
id объекта, id операции (покупка, продажа), datetime операции, уплаченная сумма.

Задача просуммировать по каждому виду объектов отдельно покупки и продажи за каждый день на определенном промежутке времени. Так же неплохо бы на каждый день по каждому объекту иметь datetime первой и последней и покупки и продажи.

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

База соответственно sybase.
Re: просуммировать за день
От: Dyusha  
Дата: 03.11.04 00:45
Оценка:
Здравствуйте, Рома Мик, Вы писали:

РМ>Привет всем. Это опять ламернутый в отношении баз данных я


РМ>Есть таблица в которой записаны данные о покупке и продаже разных объектов, ну типа:

РМ>id объекта, id операции (покупка, продажа), datetime операции, уплаченная сумма.

РМ>Задача просуммировать по каждому виду объектов отдельно покупки и продажи за каждый день на определенном промежутке времени. Так же неплохо бы на каждый день по каждому объекту иметь datetime первой и последней и покупки и продажи.


РМ>Пока у меня есть один запрос, который делает это для одного дня просто, но нужно как бы сделать много таких запросов, для каждого дня из заданного промежутка. Штука в том, что PowerBuilder не дает делать больше одного запроса на отчет.


РМ>База соответственно sybase.


Так нужно делать группировку по дням, тогда все будет в одном запросе
Жизнь — это сражение, которое ты всегда проигрываешь.
Re[2]: просуммировать за день
От: Callisto  
Дата: 03.11.04 04:36
Оценка:
D>Так нужно делать группировку по дням, тогда все будет в одном запросе

это пройдет... если в "datetime операции" — нет времени, т.е. сначала прийдеться "выковыривать" чистую дату.
Re[3]: просуммировать за день
От: Рома Мик Россия http://romamik.com
Дата: 03.11.04 09:27
Оценка:
Здравствуйте, Callisto, Вы писали:

D>>Так нужно делать группировку по дням, тогда все будет в одном запросе

C>это пройдет... если в "datetime операции" — нет времени, т.е. сначала прийдеться "выковыривать" чистую дату.
Есть там время.
Из написанного я пока ничего не понял.
Re[3]: просуммировать за день
От: Satrapp Россия  
Дата: 03.11.04 10:17
Оценка:
Здравствуйте, Callisto, Вы писали:

C>это пройдет... если в "datetime операции" — нет времени, т.е. сначала прийдеться "выковыривать" чистую дату.

наверное, слово "выковыривать" — слишком страшное для функции convert
... << RSDN@Home 1.1.4 beta 3 rev. 185>> В winamp'е зажигает silent
Re[4]: просуммировать за день
От: wildwind Россия  
Дата: 03.11.04 11:49
Оценка:
Здравствуйте, Рома Мик, Вы писали:

РМ>Из написанного я пока ничего не понял.


Давай свой запрос для одного дня, посмотрим что можно сделать.
Re: просуммировать за день
От: Рома Мик Россия http://romamik.com
Дата: 03.11.04 12:45
Оценка:
Попробую объяснить в чем сложность. Объекты с одним id могут покупаться и продаваться несколько раз за день. Вот пример.
id buysell amount datetime
1  1       10     01.01.2000 10:30
1  -1      10     01.01.2000 10:45
2  -1      10     01.01.2000 10:55
1  1       10     01.01.2000 12:30
1  1       10     01.01.2000 14:30
1  -1      10     01.01.2000 16:30
1  1       10     02.01.2000 10:30
2  1       10     02.01.2000 11:30
2  1       10     02.01.2000 13:30

А резалт сет должен быть такой
id buysell amount date         time1  time2
1  1       30     01.01.2000   10:30  14:30
1  -1      20     01.01.2000   10:45  16:30
2  -1      10     01.01.2000   10:55  10:55
1  1       10     02.01.2000   10:30  10:30
2  1       20     02.01.2000   11:30  13:30


За один день я такое сделал, это было несложно, но как сделать за несколько дней?
Re[2]: просуммировать за день
От: wildwind Россия  
Дата: 03.11.04 12:52
Оценка: 18 (1)
Здравствуйте, Рома Мик, Вы писали:

РМ>За один день я такое сделал, это было несложно, но как сделать за несколько дней?


Добавь "GROUP BY date, id, buysell"
В WHERE расширь диапазон "datetime between ... and ..."

P.S. Биржевые котировки, что ли?
Re[3]: просуммировать за день
От: Рома Мик Россия http://romamik.com
Дата: 03.11.04 13:18
Оценка:
Здравствуйте, wildwind, Вы писали:

РМ>>За один день я такое сделал, это было несложно, но как сделать за несколько дней?

W>Добавь "GROUP BY date, id, buysell"
W>В WHERE расширь диапазон "datetime between ... and ..."
Не выйдет вроде бы, у меня там подзапросы суммирующие за день... тое сть что-то вроде
select 
id,
buysell=1
amount = (select sum(amount) where buysell=1 and datetime >= :report_date and datetime < :report_date + 1),
time1 = (select min(datetime) where buysell=1 and datetime >= :report_date and datetime < :report_date + 1),
...
from paper (табличка где все возможные бумажки)
where amount <> 0 
union
тоже самое но для buysell=-1


Или я чего-то не понял в предложении... (я в базах данных так и не рублю толком, все не досуг теорией овладеть, не так часто и надо.)

W>P.S. Биржевые котировки, что ли?

Биржевые операции, торговля бумажками
Re[4]: просуммировать за день
От: Sinclair Россия https://github.com/evilguest/
Дата: 03.11.04 14:01
Оценка: 18 (1)
Здравствуйте, Рома Мик, Вы писали:

РМ>Или я чего-то не понял в предложении... (я в базах данных так и не рублю толком, все не досуг теорией овладеть, не так часто и надо.)

select id, buysell, sum(amount) as amount, min(datetime) as time1, max(datetime) as time2 
group by id, buysell, cast(datetime as integer)

... << RSDN@Home 1.1.4 beta 3 rev. 185>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[4]: просуммировать за день
От: prg  
Дата: 03.11.04 14:12
Оценка: 6 (1)
Здравствуйте, Рома Мик, Вы писали:

РМ>Здравствуйте, wildwind, Вы писали:


РМ>>>За один день я такое сделал, это было несложно, но как сделать за несколько дней?

W>>Добавь "GROUP BY date, id, buysell"
W>>В WHERE расширь диапазон "datetime between ... and ..."
РМ>Не выйдет вроде бы, у меня там подзапросы суммирующие за день... тое сть что-то вроде
РМ>
РМ>select 
РМ>id,
РМ>buysell=1
РМ>amount = (select sum(amount) where buysell=1 and datetime >= :report_date and datetime < :report_date + 1),
РМ>time1 = (select min(datetime) where buysell=1 and datetime >= :report_date and datetime < :report_date + 1),
РМ>...
РМ>from paper (табличка где все возможные бумажки)
РМ>where amount <> 0 
РМ>union
РМ>тоже самое но для buysell=-1
РМ>


РМ>Или я чего-то не понял в предложении... (я в базах данных так и не рублю толком, все не досуг теорией овладеть, не так часто и надо.)


а если так попробовать переделать так
select 
trunc(datetime),
id,
buysell,
sum(amount) ,
min(datetime) ,
max(datetime) ,
from paper (табличка где все возможные бумажки)
where amount <> 0 
and buysell=1 and datetime >= :report_date and datetime < :report_date + 30
group by trunc(datetime)

union

select 
trunc(datetime),
id,
buysell,
sum(amount) ,
min(datetime) ,
max(datetime) ,
from paper (табличка где все возможные бумажки)
where amount <> 0 
and buysell=-1 and datetime >= :report_date and datetime < :report_date + 30
group by trunc(datetime)




W>>P.S. Биржевые котировки, что ли?

РМ>Биржевые операции, торговля бумажками
Re[5]: просуммировать за день
От: Рома Мик Россия http://romamik.com
Дата: 03.11.04 14:13
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>
S>select id, buysell, sum(amount) as amount, min(datetime) as time1, max(datetime) as time2 
S>group by id, buysell, cast(datetime as integer)
S>

S>)
О, вот так уже и мне понятно стало. Будем попробовать, запросы правда к сожалению все более сложные, чем приведенный пример, так что придется поработать...
Re[5]: просуммировать за день
От: Рома Мик Россия http://romamik.com
Дата: 03.11.04 14:15
Оценка:
Здравствуйте, prg, Вы писали:

prg>а если так попробовать переделать так

В табличке paper buysell нету, там описания бумажек только. Но все равно спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.