powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Запрос на выод записей.
25 сообщений из 118, страница 2 из 5
Запрос на выод записей.
    #38100534
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakovна тройку с её агрегатными фнкциями.
Поправочка: оконными функциями.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38100535
sorockinalex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если добавить Max в запросе к номеру изделия - то работает. Но фишка в том, что он не обязательно может быть больше... он может быть произвольным, а нужно именно выбрать номер изделия от последней даты...

Вот так работает, но это не то, что нужно...
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
select 
    equipmentpars.equipmentid,
    equipmentlist.shifr,
    equipmentlist.naim,
    equipmentlist.oboz,
    equipmentparslist.equipmentpar,
    max( equipmentpars.equipmentparvalue, ) max_of_equipmentparvalue,
    max( equipmentpars.equipmentpardatetime, ) max_of_equipmentpardatetime
from equipmentparslist
   right outer join equipmentpars on (equipmentparslist.id = equipmentpars.equipmentparslistid)
   left outer join equipment on (equipmentpars.equipmentid = equipment.id)
   left outer join equipmentlist on (equipment.equipmentlistid = equipmentlist.id)
group by equipmentpars.equipmentid, equipmentlist.shifr, equipmentlist.naim, equipmentlist.oboz, equipmentparslist.equipmentpar
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38100536
sorockinalex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите, пожалуйста! Как же тогда переделать запрос??? МОжно на простом примере?
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38100598
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну раз от последней даты попробуй вот это:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
WITH E(EQUIPMENTID, EQUIPMENTPARSLISTID, EQUIPMENTPARVALUE, EQUIPMENTPARDATETIME) AS (
  SELECT EQUIPMENTPARS.EQUIPMENTID
         EQUIPMENTPARS.EQUIPMENTPARSLISTID,
         EQUIPMENTPARS.EQUIPMENTPARVALUE,
         EQUIPMENTPARS.EQUIPMENTPARDATETIME
  FROM EQUIPMENTPARS
  WHERE EQUIPMENTPARS.EQUIPMENTID = :IN_EQUIPMENTID
  ORDER BY EQUIPMENTPARDATETIME DESC ROWS 1
)
SELECT E.EQUIPMENTID,
       EQUIPMENTLIST.SHIFR,
       EQUIPMENTLIST.NAIM,
       EQUIPMENTLIST.OBOZ,
       EQUIPMENTPARSLIST.EQUIPMENTPAR,
       E.EQUIPMENTPARVALUE,
       E.EQUIPMENTPARDATETIME
FROM E
     LEFT JOIN EQUIPMENTPARSLIST ON E.EQUIPMENTPARSLISTID = EQUIPMENTPARSLIST.ID
     LEFT JOIN EQUIPMENT ON E.EQUIPMENTID = EQUIPMENT.ID
     LEFT JOIN EQUIPMENTLIST ON EQUIPMENT.EQUIPMENTLISTID = EQUIPMENTLIST.ID
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38100723
sorockinalex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Денис, спасибо, Рязанец!! ))
Пока не пробовал, позже попрогбую! Спасибо большое!
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38100726
sorockinalex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня версия Firebird 2.5 не воспринимает With, кажется... Можно как-то по-другому то же самое организовать?
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38100740
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня тоже 2.5 так-что должна.
Код: sql
1.
SELECT EQUIPMENTPARS.EQUIPMENTID -- запятая пропущена
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38100741
sorockinalex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ой, извиняюсь... это в самой процедуре... отлаживаю немного по-другому... позже напишу как сделал. Спасибо огромное!
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38100751
sorockinalex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
блин, немного не то, что мне надо... проблема... если кратко...
в главной таблице параметров, допустим:

Параметры
Id__________IdОборудования_________Дата
1__________1______________________12.12.12
2__________1______________________13.01.13
3__________2______________________12.12.12

Надо оставить:
Id__________IdОборудования_________Дата
2__________1______________________13.01.13
3__________2______________________12.12.12

Так как мне нужен Id параметра потом, чтобы связать этот запрос с таблицей и получить значение параметра из этой же таблицы параметров...
Как не пытался - всё равно к этой проблеме прихожу...
Просто запрос должен выдавать список всего оборудования, а не только одного, первого в списке сверху... (DESC ROWS 1)
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38100768
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
WITH E(EQUIPMENTID, EQUIPMENTPARSLISTID, EQUIPMENTPARVALUE, EQUIPMENTPARDATETIME) AS (
  SELECT EQ2.EQUIPMENTID
         EQ2.EQUIPMENTPARSLISTID,
         EQ2.EQUIPMENTPARVALUE,
         Max(EQ2.EQUIPMENTPARDATETIME)
  FROM EQUIPMENTPARS EQ2
  WHERE EQUIPMENTPARS.EQUIPMENTID = :IN_EQUIPMENTID
  GROUP BY 1, 2, 3
)
SELECT E.EQUIPMENTID,
       EQUIPMENTLIST.SHIFR,
       EQUIPMENTLIST.NAIM,
       EQUIPMENTLIST.OBOZ,
       EQUIPMENTPARSLIST.EQUIPMENTPAR,
       E.EQUIPMENTPARVALUE,
       E.EQUIPMENTPARDATETIME
FROM E
     LEFT JOIN EQUIPMENTPARSLIST ON E.EQUIPMENTPARSLISTID = EQUIPMENTPARSLIST.ID
     LEFT JOIN EQUIPMENT ON E.EQUIPMENTID = EQUIPMENT.ID
     LEFT JOIN EQUIPMENTLIST ON EQUIPMENT.EQUIPMENTLISTID = EQUIPMENTLIST.ID
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38100775
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
FOR SELECT E.ID_EQUIPMENT,
                 MAX(E.BYDATE)
      FROM EQUIPMENT E
      GROUP BY 1
      INTO :X_ID, :X_BYDATE
DO
  SELECT E.ID,
             E.ID_EQUIPMENT,
             E.BYDATE
  FROM EQUIPMENT E
  WHERE  E.ID_EQUIPMENT = :X_ID AND E.BYDATE = :X_BYDATE
  DO :ID, :ID_EQ, :BYDATE


....
Понял. Схематически надо что-то такое
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38100801
sorockinalex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот так сделал
Код: sql
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.
39.
40.
BEGIN
  FOR
    with e as
    (
        select
            equipmentpars.equipmentid,
            equipmentparslist.equipmentpar,
            max(equipmentpars.equipmentpardatetime) max_of_equipmentpardatetime
        from equipmentparslist
           right outer join equipmentpars on (equipmentparslist.id = equipmentpars.equipmentparslistid)
        where 
           (
              (equipmentparslist.equipmentpar = 'Номер изделия')
           )
        group by equipmentpars.equipmentid, equipmentparslist.equipmentpar
        order by equipmentpars.equipmentid
    )
    select
        e.equipmentid,
        equipmentlist.shifr,
        equipmentlist.naim,
        equipmentlist.oboz,
        equipmentpars.equipmentparvalue,
        e.max_of_equipmentpardatetime
    from e
       left outer join equipmentpars on (e.equipmentid = equipmentpars.equipmentid and e.max_of_equipmentpardatetime=equipmentpars.equipmentpardatetime)
       left outer join equipment on (e.equipmentid = equipment.id)
       left outer join equipmentlist on (equipment.equipmentlistid = equipmentlist.id)
    
    INTO :EQUIPMENTID,
         :SHIFR,
         :NAIM,
         :OBOZ,
         :EQUIPMENTPARVALUE,
         :BIRTHYEAR
  DO
  BEGIN
    SUSPEND;
  END
END
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38100802
sorockinalex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38100812
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sorockinalex> Вот так сделал

А зачем тут PSQL (Execute Block)?
Делай обычным запросом (DSQL).

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38102321
sorockinalex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я новичок, не понял Вас!!!

В общем, проблема при вызове процедуры из делфи:
Код: sql
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.
39.
40.
41.
BEGIN
  FOR
    with e as
    (
        select
            equipmentpars.equipmentid,
            equipmentparslist.equipmentpar,
            max(equipmentpars.equipmentpardatetime) max_of_equipmentpardatetime
        from equipmentparslist
           right outer join equipmentpars on (equipmentparslist.id = equipmentpars.equipmentparslistid)
        where 
           (
              (equipmentparslist.equipmentpar = 'Номер изделия') and
              (equipmentpars.equipmentid = :in_equipmentid)
           )
        group by equipmentpars.equipmentid, equipmentparslist.equipmentpar
        order by equipmentpars.equipmentid
    )
    select
        e.equipmentid,
        equipmentlist.shifr,
        equipmentlist.naim,
        equipmentlist.oboz,
        equipmentpars.equipmentparvalue,
        e.max_of_equipmentpardatetime
    from e
       left outer join equipmentpars on (e.equipmentid = equipmentpars.equipmentid and e.max_of_equipmentpardatetime=equipmentpars.equipmentpardatetime)
       left outer join equipment on (e.equipmentid = equipment.id)
       left outer join equipmentlist on (equipment.equipmentlistid = equipmentlist.id)
    
    INTO :EQUIPMENTID,
         :SHIFR,
         :NAIM,
         :OBOZ,
         :EQUIPMENTPARVALUE,
         :BIRTHYEAR
  DO
  BEGIN
    SUSPEND;
  END
END




Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
procedure TFReleaseEquipment.EquipmentFilter(equipmentid_: integer);
begin
  equipmentfilteredcount := 0;
  with DM, Self do
  begin
    IBQuery.SQL.Clear;
    if equipmentid_ <> 0 then
      IBQuery.SQL.Add ('execute procedure EQUIPMENTWITHLATESTNUMBERSSEL (' + inttostr(equipmentid_) + ')')
    else
      IBQuery.SQL.Add ('execute procedure EQUIPMENTWITHLATESTNUMBERS ("' +
        shifrEdit.Text + '","' + naimEdit.Text + '","' + obozEdit.Text + '","' +
        numberEdit.Text + '","' + birthyearEdit.Text + '")');
//    IBQuery.Transaction.StartTransaction;
    IBQuery.ExecSQL;
//ShowMessage('2');
//    IBQuery.Transaction.Commit;
//ShowMessage('3');
//    IBQuery.Transaction.Active:=false;
ShowMessage('RecordCount='+IntToStr(IBQuery.RecordCount));
  end;
end;



Выполняю
EquipmentFilter(1)

ShowMessage('RecordCount='+IntToStr(IBQuery.RecordCount)); выдаёт 0 записей...

Хотя в IBExpert при запуске процедуры и вводе 1 в поле входной переменной выдаёт 1 запись... В чём дело??? (((((((
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38102325
sorockinalex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И так тоже делал
Код: pascal
1.
2.
3.
4.
    IBQuery.Transaction.StartTransaction;
    IBQuery.ExecSQL;
    IBQuery.Transaction.Commit;
    IBQuery.Open;



Всё равно он не видит, что запрос выполнен...
Делал до этого на аксессе, только перешёл на firebird
на аксессе так работает!
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38102326
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sorockinalexВ общем, проблема при вызове процедуры из делфи:
http://www.ibase.ru/devinfo/sp_call.htm
читай про селективные процедуры, и как их вызывать.
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38102328
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sorockinalexИ так тоже делал
бред. читай в http://www.ibase.ru/devinfo/ibx.htm про транзакции.
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38102334
sorockinalex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
разобрался!!
Это селективная процедура, для неё нужно делать select * from [процедура]

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
procedure TFReleaseEquipment.EquipmentFilter(equipmentid_: integer);
begin
  equipmentfilteredcount := 0;
  with DM, Self do
  begin
    IBQuery.SQL.Clear;
    if equipmentid_ <> 0 then
//      IBQuery.SQL.Add ('execute procedure EQUIPMENTWITHLATESTNUMBERSSEL (1)')//' + inttostr(equipmentid_) + ')')
      IBQuery.SQL.Add ('select * from EQUIPMENTWITHLATESTNUMBERSSEL (1)')//' + inttostr(equipmentid_) + ')')
    else
      IBQuery.SQL.Add ('execute procedure EQUIPMENTWITHLATESTNUMBERS ("' +
        shifrEdit.Text + '","' + naimEdit.Text + '","' + obozEdit.Text + '","' +
        numberEdit.Text + '","' + birthyearEdit.Text + '")');
//    IBQuery.Transaction.StartTransaction;
//    IBQuery.Transaction.Active:=True;
//    IBQuery.ExecSQL;
//    IBQuery.Transaction.Commit;
    IBQuery.Open;
//    IBQuery.Transaction.Active:=false;
ShowMessage('RecordCount='+IntToStr(IBQuery.RecordCount));
  end;
end;
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38102336
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sorockinalexразобрался!!Теперь читай про параметры.
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38102339
sorockinalex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
теперь непонятно почему вылетает ошибка...

Код: pascal
1.
2.
3.
4.
5.
      IBQuery.SQL.Add ('select * from EQUIPMENTWITHLATESTNUMBERS ("' +
        shifrEdit.Text + '","' + naimEdit.Text + '","' + obozEdit.Text + '","' +
        numberEdit.Text + '","' + birthyearEdit.Text + '")');
ShowMessage(IBQuery.SQL.Text);
    IBQuery.Open;
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38102340
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще раз, медленно: "читать про параметры до просветления".
;)
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38102345
sorockinalex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
заменил кавычки на двойные апострофы - всё заработало...
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38102348
sorockinalex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ivan_PisarevskyЕще раз, медленно: "читать про параметры до просветления".
;)
было бы время, то и сам бы разобрался... просто некогда, совсем уж некогда, до завтра надо простенький модуль доделать...
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38102356
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нам некогда пилу точить, нам пилить надо!
sorockinalexзаменил кавычки на двойные апострофы - всё заработало...И чего только эти русские не придумают лишь бы дороги не строить. (с, анекдот)
...
Рейтинг: 0 / 0
25 сообщений из 118, страница 2 из 5
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Запрос на выод записей.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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