Привет всем. Это опять ламернутый в отношении баз данных я
Есть таблица в которой записаны данные о покупке и продаже разных объектов, ну типа:
id объекта, id операции (покупка, продажа), datetime операции, уплаченная сумма.
Задача просуммировать по каждому виду объектов отдельно покупки и продажи за каждый день на определенном промежутке времени. Так же неплохо бы на каждый день по каждому объекту иметь datetime первой и последней и покупки и продажи.
Пока у меня есть один запрос, который делает это для одного дня просто, но нужно как бы сделать много таких запросов, для каждого дня из заданного промежутка. Штука в том, что PowerBuilder не дает делать больше одного запроса на отчет.
Здравствуйте, Рома Мик, Вы писали:
РМ>Привет всем. Это опять ламернутый в отношении баз данных я
РМ>Есть таблица в которой записаны данные о покупке и продаже разных объектов, ну типа: РМ>id объекта, id операции (покупка, продажа), datetime операции, уплаченная сумма.
РМ>Задача просуммировать по каждому виду объектов отдельно покупки и продажи за каждый день на определенном промежутке времени. Так же неплохо бы на каждый день по каждому объекту иметь datetime первой и последней и покупки и продажи.
РМ>Пока у меня есть один запрос, который делает это для одного дня просто, но нужно как бы сделать много таких запросов, для каждого дня из заданного промежутка. Штука в том, что PowerBuilder не дает делать больше одного запроса на отчет.
РМ>База соответственно sybase.
Так нужно делать группировку по дням, тогда все будет в одном запросе
Жизнь — это сражение, которое ты всегда проигрываешь.
Здравствуйте, Callisto, Вы писали:
D>>Так нужно делать группировку по дням, тогда все будет в одном запросе C>это пройдет... если в "datetime операции" — нет времени, т.е. сначала прийдеться "выковыривать" чистую дату.
Есть там время.
Из написанного я пока ничего не понял.
Здравствуйте, Callisto, Вы писали:
C>это пройдет... если в "datetime операции" — нет времени, т.е. сначала прийдеться "выковыривать" чистую дату.
наверное, слово "выковыривать" — слишком страшное для функции convert
Здравствуйте, 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. Биржевые котировки, что ли?
Биржевые операции, торговля бумажками
Здравствуйте, Рома Мик, Вы писали:
РМ>Или я чего-то не понял в предложении... (я в базах данных так и не рублю толком, все не досуг теорией овладеть, не так часто и надо.)
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>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Рома Мик, Вы писали:
РМ>Здравствуйте, 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
andbuysell=1and 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
andbuysell=-1and datetime >= :report_date and datetime < :report_date + 30
group by trunc(datetime)
W>>P.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>)
О, вот так уже и мне понятно стало. Будем попробовать, запросы правда к сожалению все более сложные, чем приведенный пример, так что придется поработать...
Здравствуйте, prg, Вы писали:
prg>а если так попробовать переделать так
В табличке paper buysell нету, там описания бумажек только. Но все равно спасибо.