Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Invalid aggregate reference / 25 сообщений из 32, страница 1 из 2
10.04.2004, 16:50
    #32476498
BigBob
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Invalid aggregate reference
Помогите пожалуйста разобраться. Есть две таблицы:
Код: plaintext
1.
2.
t1
Nomer integer
Name varchar( 10 )

Код: plaintext
1.
2.
3.
t2
Nomer integer
Data TIMESTAMP
Price double

В первой таблице хранятся записи о товарах (название, и т.д.). Во второй - цены с указанием даты установки цены. Таблицы связаны по полю Nomer.
Пытаюсь посичтать среднее время действия цен таким вот запросом:
Код: plaintext
select avg(cast('today' as TIMESTAMP) - (select max(t2.data) from t2 where t2.nomer = t1.nomer )) from t1

При этом получаю следующее сообщение об ошибке: "Invalid aggregate reference". Помогите пожалуйста побороть? Заранее спасибо!
...
Рейтинг: 0 / 0
11.04.2004, 16:45
    #32476809
Winni-Pooh
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Invalid aggregate reference
Я так понял, задача у тебя не разовая, поэтому почему бы не прибегнуть к ХП.
Вот примерный текст(извини, времени мало, писал быстро и проверить не успел:возможна путаница типов)

Код: 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.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
CREATE PROCEDURE AverGoodPriceTime
RETURNS (Nomer Integer,Name VarChar( 10 ),AverPriceTime Float)
AS
DECLARE VARIABLE Data TimeStamp;
DECLARE VARIABLE Price Double;
DECLARE VARIABLE LastData TimeStamp;
DECLARE VARIABLE NewData TimeStamp;
DECLARE VARIABLE AvgTime TimeStamp;
DECLARE VARIABLE LastTime TimeStamp;
DECLARE VARIABLE TimeCount SmallInt;
BEGIN
 FOR SELECT Nomer,Name
           FROM t1
           INTO :Nomer,:Name
 DO
  BEGIN
   NewData='01-Jan-1800';
   AvgTime= 0 ;
   LastTime= 0 ;
   TimeCount= 0 ;
   FOR SELECT Data,Price
        FROM t2
        WHERE (t2.Nomer=:Nomer)
        INTO :Data,:Price
   DO
    BEGIN
     LastData=NewData;
     NewData=Data;
     IF (LastData>'01-Jan-1800') THEN
      BEGIN
        TimeCount=TimeCount+ 1 ;
        LastTime=NewData-LastData;
        AvgTime=AvgTime+LastTime;
      END
    END
   AverPriceTime=AvgTime/TimeCount;
   SUSPEND;
  END
END;
...
Рейтинг: 0 / 0
11.04.2004, 16:46
    #32476810
Winni_Pooh
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Invalid aggregate reference
ЗЫ: Странно, писал текст процедуры лесенкой, а тут...
...
Рейтинг: 0 / 0
12.04.2004, 12:01
    #32477319
BigBob
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Invalid aggregate reference
Дело в том, что мне нужно ещё и отбирать товары по типам, которые указал пользователь. Что-то вроде:
Код: plaintext
where Type in ( 1 ,  2 ,  5 ,  7 ,  14 )

А я так понял, что в качестве параметра хранимой процедур масив передать нельзя ;(
...
Рейтинг: 0 / 0
12.04.2004, 16:02
    #32477803
Winni-Pooh
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Invalid aggregate reference
Классически это делается путем предварительного заполнения специально созданной таблицы всего с одним полем, она потом INNER JOIN с t1. и GROUP BY Type.(Это первый FOR SELECT... в процедуре). Вот и все! :-)
...
Рейтинг: 0 / 0
12.04.2004, 16:48
    #32477904
BigBob
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Invalid aggregate reference
А в случае с несколькими пользователями одновременно - заводим ещё одно поле что-то вроде UserId?
Подскажите плис, где можно посмотреть еще стандартных приёмов?
...
Рейтинг: 0 / 0
12.04.2004, 16:59
    #32477930
Winni-Pooh
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Invalid aggregate reference
Да, придется добавлять поле UserID. Хотя тебе значения в таблице хранить всего лишь на время вычисления. Можно обойтись уровнем изоляции SnapShot:
открываешь транзакцию, очищаешь таблицу, кладешь значения, вычисляешь, закрываешь транзакцию - готово.
...
Рейтинг: 0 / 0
12.04.2004, 17:01
    #32477945
BigBob
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Invalid aggregate reference
Так нверное и сделаю. Thanks!
...
Рейтинг: 0 / 0
12.04.2004, 17:26
    #32478019
Dnico
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Invalid aggregate reference
А что за сервер пользуешь ? Если FB 1.5, то там есть классная штучка:

EXECUTE STATEMENT

Примерно так работает :
Код: plaintext
1.
STR = ' WHERE Type in (1, 2, 5, 7, 14) ';
EXECUTE STATEMENT 'SELECT * FROM T ' || STR INTO :PARMS 

В итого получаешь :
Код: plaintext
 SELECT * FROM T WHERE Type in ( 1 ,  2 ,  5 ,  7 ,  14 ) INTO :PARMS 


Best regards,
Dnico.
...
Рейтинг: 0 / 0
13.04.2004, 11:23
    #32478737
BigBob
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Invalid aggregate reference
InterBase 6
...
Рейтинг: 0 / 0
13.04.2004, 11:26
    #32478746
fedd
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Invalid aggregate reference
Ату!
...
Рейтинг: 0 / 0
13.04.2004, 12:17
    #32478837
BigBob
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Invalid aggregate reference
Согласен, что ату ;) У клиента стоит готовая уже прога, к которой я подвязался статистику писать. Так что приходится юсать то что есть ;(
...
Рейтинг: 0 / 0
13.04.2004, 12:18
    #32478839
BigBob
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Invalid aggregate reference
Согласен, что ату ;) У клиента стоит готовая уже прога, к которой я подвязался статистику писать. Так что приходится юсать то что есть ;(
...
Рейтинг: 0 / 0
13.04.2004, 12:30
    #32478865
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Invalid aggregate reference
А при чем тут прога?
...
Рейтинг: 0 / 0
13.04.2004, 13:41
    #32479068
BigBob
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Invalid aggregate reference
Как причем? У людей стоит InterBase, на толпе рабочих мест крутится софтина, которая его юсает. И тут прихожу я со своей статистикой и говорю, что нужно быстренько сервер запгрэйдить.
...
Рейтинг: 0 / 0
13.04.2004, 13:45
    #32479077
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Invalid aggregate reference
Для непонятливых, спрошу ещё раз. При чём тут прога к этому глюкалову (IB6) ?
...
Рейтинг: 0 / 0
13.04.2004, 13:53
    #32479101
Dnico
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Invalid aggregate reference
BigBob
Всем давно уже известно что IB6 старый и не работающий сервер.
Еще не известно почему эта прога вообще работает. Скорее всего она написана с использованием элементарных запросов.
При изменении сервера программа будет дальше продолжать работать.
Никто даже не заметит, хотя может быть и удивятся - почему стало все шустрить.


Best regards,
Dnico.
...
Рейтинг: 0 / 0
13.04.2004, 13:58
    #32479113
BigBob
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Invalid aggregate reference
Тоесть я правильно понял, просто ставится Firebird, переливется база и всё должно заработать как раньше? Как это было бы здорово!
...
Рейтинг: 0 / 0
13.04.2004, 14:02
    #32479124
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Invalid aggregate reference
Клиента ещё нужно поставить нового на рабочие места.
...
Рейтинг: 0 / 0
13.04.2004, 14:07
    #32479139
BigBob
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Invalid aggregate reference
Спасибо! Пошел качать новый сервер и эксперементировать ;)
...
Рейтинг: 0 / 0
13.04.2004, 17:38
    #32479728
BigBob
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Invalid aggregate reference
Подскажите еще плис, люди добрые, я конструкцию
Код: plaintext
create generator
могу в хранимой процедуре использовать? IBConsole ругается со страшной силой ;(
...
Рейтинг: 0 / 0
13.04.2004, 17:43
    #32479741
Dnico
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Invalid aggregate reference
Нет, такое не поддерживаенся ...

Best regards,
Dnico.
...
Рейтинг: 0 / 0
13.04.2004, 18:09
    #32479785
BigBob
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Invalid aggregate reference
Я хотел сделать хранимую процедуру, которую бы вызывал в самом начале работы клиентской проги, сразу после соединения с сревером. Думал в ней проверять наличие нужных вьюшек, хранимых процедур, генераторов. Если чего-то не хватает - можно было бы сразу создавать. Получается не выйдет у меня завести такую процедуру ;(
...
Рейтинг: 0 / 0
13.04.2004, 18:13
    #32479795
Dnico
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Invalid aggregate reference
Ну уж если очень хочется, то вот тут как раз об этом только что обсуждалось:\r
/topic/86536#626651\r
\r
Best regards,\r
Dnico.
...
Рейтинг: 0 / 0
13.04.2004, 18:13
    #32479797
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Invalid aggregate reference
Нахер такую процедуру пихать в SP.
Делай это на клиенте.
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Invalid aggregate reference / 25 сообщений из 32, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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