powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Запрос на выод записей.
118 сообщений из 118, показаны все 5 страниц
Запрос на выод записей.
    #38091478
aydar1992
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообщем пытаюсь сделать запрос на выборку по определенному ид, например
Все табл соединены, вот просто выборка на вывод всех записей, надо выводит записи у которых например
sale.KOD_SOTR=1

авторselect sale.DATA, sale.ETAP,sale.KOD_SOTR,sotr.FIO_SOTR, sale.ID_SALE, sale.KOD_CLIENT, sale.PROD, sale.PROD2, sale.SUMM, sale.VIDPROD, sale.VIDPROD2,client.fio,OFFICE.NAME_OFF
from sale,client,sotr,OFFICE
where sale.KOD_CLIENT=client.ID_CLIENT and sale.KOD_SOTR=sotr.ID_SOTR and sotr.KOD_OFF=OFFICE.ID_OFF


Как сформировать правильно запрос?
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38091486
Tactical Nuclear Penguin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
and sale.KOD_SOTR=1
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38091505
aydar1992
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tactical Nuclear Penguin,

гдето у меня ошибка но не могу найти.

авторconst
saleSelectSQLText=
'select sale.DATA, sale.ETAP,sale.KOD_SOTR,sotr.FIO_SOTR, sale.ID_SALE, sale.KOD_CLIENT, sale.PROD, sale.PROD2, sale.SUMM,'+
'sale.VIDPROD, sale.VIDPROD2,client.fio,OFFICE.NAME_OFF from sale,client,sotr,OFFICE'+
'where sale.KOD_CLIENT=client.ID_CLIENT and sale.KOD_SOTR=sotr.ID_SOTR and sotr.KOD_OFF=OFFICE.ID_OFF ';


{'select sale.DATA, sale.ETAP,sale.KOD_SOTR,sotr.FIO_SOTR, sale.ID_SALE, sale.KOD_CLIENT,'+
'sale.PROD, sale.PROD2, sale.SUMM, sale.VIDPROD, sale.VIDPROD2,client.fio,OFFICE.NAME_OFF'+
'from sale,client,sotr,OFFICE'+
'where sale.KOD_CLIENT=client.ID_CLIENT and sale.KOD_SOTR=sotr.ID_SOTR and sotr.KOD_OFF=OFFICE.ID_OFF';
}
var
saleOrderbyFieldName: string = '';

function Tform2.saleSQL(SortField: string): string;
begin
Result := saleSelectSQLText;
if prava=0 then
Result := Result + ' and sale.KOD_SOTR=1'; //+ IntTostr(cursotrid);
if saleOrderbyFieldName = '' then
begin
Result := Result + ' order by ' + SortField;
saleOrderbyFieldName := SortField; //запомним текущее состяние сортировки
end else
if Pos('desc', saleOrderbyFieldName)=0 then
begin
Result := Result + ' order by ' + SortField + ' desc';
saleOrderbyFieldName := SortField + ' desc';
end else
saleOrderbyFieldName := '';
end;

Если в ib апрос делать то все выводиться нормально.
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38091579
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aydar1992гдето у меня ошибка но не могу найти.
ошибка? какая-такая ошибка?

aydar1992Если в ib апрос делать то все выводиться нормально.
значит у тебя при склеивании запроса в программе получается кривой запрос. Читай сообщение об ошибке внимательно.
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38091584
aydar1992
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv,

sql error code=-104
token unknown - line 1, column 216
'.
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38091621
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aydar1992,

то есть, ты перед выполнением запроса в программе не можешь в отладчике посмотреть, что получилось в результате склеивания?
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38091645
Фотография arni
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aydar1992,

найди место, где делаешь открытие датасета/квери и через ShowMessage() выведи то, что склеил в текст запроса. Обычно потерянные разделители или кавычки очень хорошо видно. Не разберешься - давай сюда звпрос. Но только не надо постить дельфовый код - это никому не интересно как ты склеиваешь , важно что ты получаешь .
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38091662
Фотография peter64
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 автор
'select sale.DATA, sale.ETAP,sale.KOD_SOTR,sotr.FIO_SOTR, sale.ID_SALE, sale.KOD_CLIENT, sale.PROD, sale.PROD2, sale.SUMM, '+
'sale.VIDPROD, sale.VIDPROD2,client.fio,OFFICE.NAME_OFF from sale,client,sotr,OFFICE '+
перед закривающей кавычкой поставь пробел
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38091759
aydar1992
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
arni,

вот что склеил

авторselect sale.DATA, sale.ETAP,sale.KOD_SOTR,sotr.FIO_SOTR, sale.ID_SALE, sale.KOD_CLIENT, sale.PROD, sale.PROD2, sale.SUMM,sale.VIDPROD, sale.VIDPROD2,client.fio,OFFICE.NAME_OFF from sale,client,sotr,OFFICE where sale.KOD_CLIENT=client.ID_CLIENT and sale.KOD_SOTR=sotr.ID_SOTR and sotr.KOD_OFF=OFFICE.ID_OFF and sale.KOD_SOTR=1 order by
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38091765
Фотография arni
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ошибка здесь
Код: sql
1.
order by 
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38091768
aydar1992
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
arni,

лишние order by, но он нужно при сортировки. например
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38091776
Фотография arni
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aydar1992,

ты скомандовал "отсортируй", но не сказал по какому полю. Чтобы ты сделал на месте сервера, если увидел такую незаконченную команду?
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38091829
aydar1992
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
arni,

arni,
наконецто сделал, if SortField='' then Exit; забыл в склейки
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38100277
sorockinalex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ребята, помогите, пожалуйста! Совершенно не знаю как сделать следующее в запросе. В таблице столбец формата timestamp... Нужно в запросе отобрать записи только по году.. Как преобразовать timestamp в год??? Желательно в формате четырёх цифр = "2012"

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
select 
    equipmentpars.equipmentid,
    equipmentlist.shifr,
    equipmentlist.naim,
    equipmentlist.oboz,
    equipmentpars.equipmentpardatetime
from equipmentpars
   left outer join equipment on (equipmentpars.equipmentid = equipment.id)
   left outer join equipmentlist on (equipment.equipmentlistid = equipmentlist.id)
   left outer join equipmentparslist on (equipmentpars.equipmentparslistid = equipmentparslist.id)
where 
   (
      (equipmentpars.equipmentpardatetime = 2012)
   )
order by equipmentlist.shifr, equipmentlist.naim, equipmentlist.oboz
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38100287
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sorockinalexКак преобразовать timestamp в год???
RTFM EXTRACT()
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38100288
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EXTRACT(YEAR FROM Дата)
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38100289
sorockinalex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
случайно наткнулся в просторах интернета не решение
Код: sql
1.
2.
3.
4.
where 
   (
      (extract(year from equipmentpars.equipmentpardatetime)=2013)
   )
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38100311
miwaonline
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На фотофинише DS обошел всех. Опыт не пропьешь даже «в ночь с 31 на 11»
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38100473
sorockinalex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо! всем спасибо, сразу не увидел!
вот ещё вопросик. почему-то при попытке использовать GROUP BY выдаёт ошибку: not contained in either an aggregate function or the GROUP BY... дело в том, что может быть много записей номера изделия, но с разными датами (вдруг номер изменили после переконсервации через несколько лет). и это у каждого выпускаемого оборудования! получается
Оборудование Номер Дата
1 1 12.12.2012
1 2 13.01.2013
2 1 12.12.2012
3 1 12.12.2012

А нужно в результате выполнения запроса с группировать по идентификатору оборудования, при этом выбрать номер по самой последней дате для данного оборудования, то есть нужно получить:

Оборудование Номер Дата
1 2 13.01.2013
2 1 12.12.2012
3 1 12.12.2012

То есть мы получили список выпущенного оборудования с актуальными номерами. В коде ниже я уже отфильтровываю по конкретному идентификатору одно оборудование...
Код: 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.
BEGIN
  FOR
    select
        equipmentpars.equipmentid,
        equipmentlist.shifr,
        equipmentlist.naim,
        equipmentlist.oboz,
        equipmentparslist.equipmentpar,
        equipmentpars.equipmentparvalue,
        maxvalue(equipmentpars.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)
    where
       (
          (equipmentpars.equipmentid = :IN_EQUIPMENTID )
       )
    group by equipmentpars.equipmentid
    INTO :EQUIPMENTID,
         :SHIFR,
         :NAIM,
         :OBOZ,
         :EQUIPMENTPAR,
         :EQUIPMENTPARVALUE,
         :BIRTHYEAR
  DO
  BEGIN
    SUSPEND;
  END
END



И вот отказывается GROUP BY работать, не пойму в чём дело...
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38100508
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В GROUP BY должны входить все поля из SELECT у которых нет агрегирующих функций, т.е.
GROUP BY 1, 2, 3, 4, 5, 6
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38100523
sorockinalex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
не может сгруппировать - значение параметра "номер изделия" (equipmentpars.equipmentparvalue) для одного и того же изделия может отличаться!!!!
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38100525
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sorockinalexзначение параметра "номер изделия" (equipmentpars.equipmentparvalue)
для одного и того же изделия может отличаться!!!!
Ну так тут уж реши какой именно из 100500 "номеров изделия" ты хочешь для данного изделия
видеть.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38100526
sorockinalex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот схема данных и результат запроса...
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38100528
sorockinalex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хочу тот, который от последней даты... Второй в картинке выше
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38100533
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sorockinalexХочу тот, который от последней даты..

Тогда тебе надо переходить на тройку с её агрегатными фнкциями. Или полностью переделывать
запрос.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #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
Запрос на выод записей.
    #38102357
sorockinalex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kdvsorockinalexВ общем, проблема при вызове процедуры из делфи:
http://www.ibase.ru/devinfo/sp_call.htm
читай про селективные процедуры, и как их вызывать.
Спасибо за ссылочку, но ту страничку я и прочитал уже...
кстати, последний запрос почему-то выдаёт одну строку, хотя должен несколько...
Запускаю то же самое в ibexpert - получаю несколько строк...

Код: pascal
1.
2.
3.
      IBQuery.SQL.Add ('select * from EQUIPMENTWITHLATESTNUMBERS (''' +
        shifrEdit.Text + ''',''' + naimEdit.Text + ''',''' + obozEdit.Text + ''',''' +
        numberEdit.Text + ''',''' + birthyearEdit.Text + ''')');
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38102364
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FetchAll
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38102378
sorockinalex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот спасбо, вот прекрасно!!!! Премного благодарен, Сударь!
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38102383
miwaonline
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sorockinalexkdvпропущено...

http://www.ibase.ru/devinfo/sp_call.htm
читай про селективные процедуры, и как их вызывать.
Спасибо за ссылочку, но ту страничку я и прочитал уже...
кстати, последний запрос почему-то выдаёт одну строку, хотя должен несколько...
Запускаю то же самое в ibexpert - получаю несколько строк...

Код: pascal
1.
2.
3.
      IBQuery.SQL.Add ('select * from EQUIPMENTWITHLATESTNUMBERS (''' +
        shifrEdit.Text + ''',''' + naimEdit.Text + ''',''' + obozEdit.Text + ''',''' +
        numberEdit.Text + ''',''' + birthyearEdit.Text + ''')');


А вот что будет, если вредный юзер введет в shifrEdit.Text что-то типа " 1234'; delete from EQUIPMENTWITHLATESTNUMBERS; " ?
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38102390
sorockinalex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
плохо будет... говорю же новичок.. и как это исключить? прочитал вроде ссылочку, проглядел?
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38102395
sorockinalex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в общем, проверил на существующем номере изделия. ничего не будет, да и с чего, если эти переменные только для фильтрации Where используются!
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38102397
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sorockinalexи как это исключить?чиитаать проо паараамеетрыы...
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38102534
sorockinalex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ребят, с запросом вожусь, никак не пойму как сделать...
есть таблица:
Группы оборудования
id_______название группы ______ родительская группа
1_______q_____________________null
2_______w_____________________1
3_______e_____________________1
4_______r_____________________3
5_______t_____________________4


Нужно выбрать все идентификатооры, принадлежащие одной родительской группе, то есть должно получиться:
Родительских групп может быть много, нужно выбрать только элементы, принадлежащие одной..
id_______название группы ______ родительская группа
2_______w_____________________1
3_______e_____________________1
4_______r_____________________3
5_______t_____________________4

Думаю, простым запросом не отделаешься, нужно как-то циклом что ли....
Может кто сталкивался и есть готовое решение?
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38102544
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос нормально задай сначала. В т.ч. оформи.
Если родительских групп несколько - приведи
пример с данными для нескольких групп, в т.ч.
с результатом, который хочешь получить.

А-то в текущей постановке вопроса - ответ -
используй where родительская группа is not null.

P.S. И приводи DDL, а не "свои" идентификаторы.

P.P.S. Деревья (вложенность) обычно разбирается
либо с помощью With Recursive, либо рекурсивной
хранимой процедурой.

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

вот так:
Группы оборудования
id_______название группы ______ родительская группа
1_______q_____________________null
2_______w_____________________1
3_______e_____________________1
4_______r_____________________3
5_______t_____________________4
6_______y_____________________null
7_______u_____________________6
8_______i_____________________6



Нужно выбрать все идентификатооры, принадлежащие одной родительской группе, то есть должно получиться:
Родительских групп может быть много, нужно выбрать только элементы, принадлежащие одной..
id_______название группы ______ родительская группа
2_______w_____________________1
3_______e_____________________1
4_______r_____________________3
5_______t_____________________4
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38102576
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sorockinalex> не знаю что такое DDL

Скрипт создания таблицы.

> Нужно выбрать все идентификатооры, принадлежащие одной родительской группе

Т.е. поддерево для указанного узла. См. ответ выше -
with recursive, рекурсивная хранимац процедура.
Информацию и примеры можешь прочитать на ibase.ru,
/topic/873434

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38102588
sorockinalex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо за примерчик! то что надо!!!!!
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38103705
sorockinalex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ребят, подскажите, пожалуйста! Возникла ситуация, что без таблицы с единственным автоинкрементным уникальным столбцом не обойтись... То есть в таблице единственный столбец ID. Нужно добавить запись в этоу таблицу - увеличить ID на 1... Insert into в данном случае не поможет...
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38103710
sorockinalex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
так будет наиболее правильно это сделать?
Код: sql
1.
SELECT GEN_ID(NEWID, 1) FROM RDB$DATABASE
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38103736
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sorockinalexInsert into в данном случае не поможет...
Что ему помешает? Разве что отсутствие мозга у программиста, не позволяющее ему написать
Код: sql
1.
insert into t (f) values (next value for seq)


Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38103752
sorockinalex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а вот это я откуда должен был знать, когда работаю с firebird всего полторы недели?
Код: sql
1.
next value for seq


а такую конструкцию insert into я уже пробовал, только не знал как сделать, если отсутствуют другие поля...

P.S. Предпочёл бы от Вас, Уважаемый, ТАКОЙ помощи больше не получать. Если Вам сложно поделиться опытом, лучше не выпендриваться и ничего вовсе не писать, чем писать сообщения, подобные вашим. Но за последнее всё же спасибо...
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38103818
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sorockinalexа вот это я откуда должен был знать, когда работаю с firebird всего
полторы недели?
Э-э-э... Из документации, не?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38103880
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sorockinalexУважаемый, ТАКОЙ помощи больше не получать.
Что мешало прочитать
http://www.ibase.ru/devinfo/generator.htm ?
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38104127
sorockinalex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в этом же мануале и прочитал про
Код: sql
1.
SELECT GEN_ID(NEWID, 1) FROM RDB$DATABASE


где прочитать про вложенное использование With As?
а то пытаюсь сделать сложный запрос, а так не выходит:
Код: 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.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
BEGIN
  FOR
    with e0 as
    (
       select
            equipmenthistory.equipmentid,
            max(equipmenthistory.equipmentpardatetime) max_of_equipmentpardatetime0
        from equipmenthistory
        where
           (
              (equipmenthistory.equipmentparslistid = 13) or
              (equipmenthistory.equipmentparslistid = 14)
           )
        group by equipmenthistory.equipmentid
        order by equipmenthistory.equipmentid
    )
        with e as
        (   
            select
                e0.equipmentid,
                e0.max_of_equipmentpardatetime0,
                max(equipmenthistory.equipmentpardatetime) max_of_equipmentpardatetime
            from e0
            where
               (
                 (equipmenthistory.equipmentparslistid = 13)
               )
            group by e0.equipmentid
            order by e0.equipmentid
        )
            select
                e.equipmentid,
                equipmentlist.shifr,
                equipmentlist.naim,
                equipmentlist.oboz,
                equipmenthistory.equipmentparvalue,
                e.max_of_equipmentpardatetime0
            from e
               left outer join equipmenthistory on (e.equipmentid = equipmenthistory.equipmentid and e.max_of_equipmentpardatetime=equipmenthistory.equipmentpardatetime)
               left outer join equipmentlist on (equipmenthistory.equipmentlistid = equipmentlist.id)
            where
            (
                  (equipmentlist.shifr like '%' || :IN_SHIFR || '%' ) and
                  (equipmentlist.naim like '%' || :IN_NAIM || '%' ) and
                  (equipmentlist.oboz like '%' || :IN_OBOZ || '%' ) and
                  (extract(year from equipmenthistory.equipmentpardatetime) like '%' || :IN_BIRTHYEAR || '%' )
            )
    order by e.max_of_equipmentpardatetime0 DESC
    INTO :EQUIPMENTID,
         :SHIFR,
         :NAIM,
         :OBOZ,
         :EQUIPMENTPARVALUE,
         :BIRTHYEAR
  DO
  BEGIN
    SUSPEND;
  END
END
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38104132
sorockinalex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
конечно, можно было бы сделать отдельными процедурами, но хочется в одной процедурке всё...
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38104134
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sorockinalexгде прочитать про вложенное использование With As?
Э-э-э... README.common_table_expressions у тебя кто-то украл?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38104139
sorockinalex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
где его найти, в хелпе поиском With искал - пусто
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38104141
sorockinalex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
дополнительных файлов помощи к программе нет - там пусто
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38104150
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sorockinalexгде его найти
В каталоге %FIREBIRD%\doc\sql.extensions\, натурально!
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38104158
sorockinalex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот спасибо, вот это похоже на помощь...
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38104175
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sorockinalexвот это похоже на помощь...
Больше это похоже на то как слепого кутёнка тычут в блюдце с молоком.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38104181
sorockinalex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я уже увидел, что некоторые тут так сильно кичатся своими знаниями, что могут только тыкать на мануалы...
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38104188
Фотография peter64
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ты спросил где найти-тебе указали. что не так

?
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38104190
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sorockinalexчто могут только тыкать на мануалы...
знаешь, как я сделал ibase.ru ? меня достало отвечать на одни и те же вопросы.
И в результате что? Ты приходишь, и опять долбишь теми же вопросами :-)

да еще и
sorockinalexв этом же мануале и прочитал про
читаешь кусками.
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38104201
sorockinalex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Может вам и кажутся вопросы однообразными... Между прочим, прежде чем здесь спрашивать всегда ищу на форумах, может подобные ситуации уже разобраны... не нахожу, спрашиваю тут...
Как буд-то все вы сразу сели и начали безошибочно писать. А головой долбиться об одно и то же, не понимая в чём проблема толку никакого не даёт, да и хелп слабенький!

Вот в ридми прочитал про common table expressions, вожусь, вожусь, никак не додолблю этот вложенный запрос, выдаёт ошибку -104....

Код: 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.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
BEGIN
  FOR
    with

    e0 as
    (
       select
            equipmenthistory.equipmentid,
            max(equipmenthistory.equipmentpardatetime) max_of_equipmentpardatetime0
        from equipmenthistory
        where
           (
              (equipmenthistory.equipmentparslistid = 13) or
              (equipmenthistory.equipmentparslistid = 14)
           )
        group by equipmenthistory.equipmentid
    ),

    e1 as
    (
       select
            e0.equipmentid,
            e0.max_of_equipmentpardatetime0,
            max(equipmenthistory.equipmentpardatetime) max_of_equipmentpardatetime1
        from e0
            left outer join equipmenthistory on (equipmenthistory.equipmentid = e0.equipmentid)
        where
           (
              (equipmenthistory.equipmentparslistid = 13)
           )
        group by e0.equipmentid
    )

    select
        e1.equipmentid,
        equipmentlist.shifr,
        equipmentlist.naim,
        equipmentlist.oboz,
        equipmenthistory.equipmentparvalue,
        e1.max_of_equipmentpardatetime0
    from e1
       left outer join equipmenthistory on (e1.equipmentid = equipmenthistory.equipmentid and e1.max_of_equipmentpardatetime=equipmenthistory.equipmentpardatetime)
       left outer join equipmentlist on (equipmenthistory.equipmentlistid = equipmentlist.id)
    where
    (
          (equipmentlist.shifr like '%' || :IN_SHIFR || '%' ) and
          (equipmentlist.naim like '%' || :IN_NAIM || '%' ) and
          (equipmentlist.oboz like '%' || :IN_OBOZ || '%' ) and
          (extract(year from equipmenthistory.equipmentpardatetime) like '%' || :IN_BIRTHYEAR || '%' )
    )
    order by e.max_of_equipmentpardatetime0 DESC
    INTO :EQUIPMENTID,
         :SHIFR,
         :NAIM,
         :OBOZ,
         :EQUIPMENTPARVALUE,
         :BIRTHYEAR
  DO
  BEGIN
    SUSPEND;
  END
END
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38104204
sorockinalex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вдобавок по некоторым ошибкам парсер не указывает на какой строке она, откуда ж мне знать в чём дело?
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38104211
sorockinalex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
фу, блин...
вроде заработало...

вынес в процедуру LATESTCHANGESEQUIPMENT
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
BEGIN
  FOR
    select
                equipmenthistory.equipmentid,
                max(equipmenthistory.equipmentpardatetime) max_of_equipmentpardatetime
            from equipmenthistory
            where
               (
                  (equipmenthistory.equipmentparslistid = 13) or
                  (equipmenthistory.equipmentparslistid = 14)
               )
            group by equipmenthistory.equipmentid
            order by equipmenthistory.equipmentid
    INTO :EQUIPMENTID,
         :MAX_OF_EQUIPMENTPARDATETIME
  DO
  BEGIN
    SUSPEND;
  END
END



А затем второй процедурой
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
       select
            latestchangesequipment.equipmentid,
            latestchangesequipment.max_of_equipmentpardatetime,
            max(equipmenthistory.equipmentpardatetime) max_of_equipmentpardatetime1
        from latestchangesequipment
            left outer join equipmenthistory on (equipmenthistory.equipmentid = latestchangesequipment.equipmentid)
        where (equipmenthistory.equipmentparslistid = 13)
        group by latestchangesequipment.equipmentid, latestchangesequipment.max_of_equipmentpardatetime



В итоге получил ID оборудования с датой последней операции для этого оборудования, а вторым столбцом - дата последнего задания номера этого оборудования... Для чего это: оборудование имеет номер в формате 123-12, где 12 - это год выпуска...
НО! Год может меняться, в результате переконсервации изделия или других операций, влияющих на результирующий номер изделия.
Может кому будет в пользу...
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38104223
miwaonline
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sorockinalexМожет вам и кажутся вопросы однообразными... Между прочим, прежде чем здесь спрашивать всегда ищу на форумах, может подобные ситуации уже разобраны... не нахожу, спрашиваю тут...
А следовало бы начинать с чтения документации. Где - повторюсь вслед за остальными - все эти вопросы уже давно разобраны и разжеваны.
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38104256
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sorockinalex,

я просто добавлю, что по многоэтажным запросам тут редко консультируют, а если и помогают, то обязательно с требованиями данных на входе, и желаемых на выходе. Иначе понять что у тебя есть, что надо, и что выводится - невозможно.
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38104260
sorockinalex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну спасибо всем, кто реально помог!
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38104276
sorockinalex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Куда смотреть, весь гугл облазил...В sql.extensions подсказки не нашёл...???
Есть таблица
ID___N1___N2
1____12___13
2____13___12
3____15___17
4____16___10
5____19___25

Столбец ID с уникальными идентификаторами

Нужно выбрать наибольшее значение в каждой строке между столбцами N1, N2
В результате должно получиться:
ID___N
1____13
2____13
3____17
4____16
5____25
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38104280
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sorockinalexКуда смотреть, весь гугл облазил...Какой-то странный гугл у вас.
Код: plaintext
1.
2.
1) select id, case when n1<n2 then n1 else n2 end from t
2) select id, iif(n1<n2, n1, n2) from t
3) select id, minvalue(n1, n2) from t

ЗЫ. Есть две пилюли, гарантированно облегчающие головную боль типа вашей.
Вот первая и вот вторая (принимать вместе, примерно в течение 2-3 месяцев, ежедневно, по 1-2 часа).
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38104283
sorockinalex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Блин, благодарствую! Я реально пару часов разными запросами к яндексу и гуглу обращался, типа:
SQL сравнение двух столбцов
SQL наибольшее значение из двух столбцов....
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38104284
sorockinalex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ещё можно вот так:
begin
for select equipmentid, max_of_equipmentpardatetime
from latestchangesequipment
into :equipmentid,
:equipmentpardatetime1
do
begin
for select equipmentid, max_of_equipmentpardatetime
from latestnumberequipment
into :equipmentid,
:equipmentpardatetime2
do
begin
if :equipmentpardatetime1 > :equipmentpardatetime2 then :equipmentpardatetime = :equipmentpardatetime1
else :equipmentpardatetime = :equipmentpardatetime2
end
end

suspend;
end
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38104286
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sorockinalexещё можно вот такМожно. Но лучше таки начать приём пилюль осваивать матчасть.
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38106692
sorockinalex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ребят, помогите плиз, CAST не работает что ли...
Код: sql
1.
2.
3.
4.
5.
6.
      select employees.firstname,
             employees.lastname,
             employees.patronymic,
             employees.personalid
      from SPLITSTRING('1,2';',')
             left outer join employees on (employees.id = CAST(SPLITSTRING.part_of_the_string as NUMERIC))



процедура SPLITSTRING разделяет строку, разделённую запятыми на строки
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38106709
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, sorockinalex!
You wrote on 11 января 2013 г. 16:30:07:

sorockinalex> ребят, помогите плиз, CAST не работает что
ли...тебе программист нужен
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38106713
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sorockinalexCAST не работает что ли...
Мозг не работает. Тип NUMERIC не имеет умолчательной точности.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38106716
sorockinalex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
разобрался частично... процедура
Код: sql
1.
SELECT * FROM SPLITSTRING('1,2,3', ',')


не правильная... точнее, она выполняется при её запуске, копирую текст SQL процедуры, вставляю в редактор запросов - запускаться перестаёт с ошибкой:
Error Message:
----------------------------------------
Unsuccessful execution caused by a system error that precludes successful execution of subsequent statements.
Dynamic SQL Error.
Input parameter mismatch for procedure SPLITSTRING.
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38106723
sorockinalex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovsorockinalexCAST не работает что ли...
Мозг не работает. Тип NUMERIC не имеет умолчательной точности.

Да я изначально сделал as Integer, вылетела ошибка, потом начал читать где-то, увидел NUMERIC, решил подставить его... Дело в процедуре сейчас... входные параметры - VARCHAR оба
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38106734
sorockinalex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот сама процедура SPLITSTRING
Код: 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.
create or alter procedure SPLITSTRING (
    S varchar(100),
    SEPARATOR varchar(1))
returns (
    PART_OF_THE_STRING varchar(100))
as
declare variable I integer;
declare variable POS integer;
declare variable PART_OF_THE_STRING_TMP varchar(100);
BEGIN
  I = 0;
  POS = 0;
  PART_OF_THE_STRING = '';
  PART_OF_THE_STRING_TMP = '';
  WHILE (:I < CHAR_LENGTH (:S)) DO
    BEGIN
      I = :I + 1;
      PART_OF_THE_STRING_TMP = SUBSTRING (:S FROM :I FOR 1);
      IF (:PART_OF_THE_STRING_TMP = :SEPARATOR) THEN
        BEGIN
          POS = :POS + 1;
          suspend;
          PART_OF_THE_STRING = '';
        END
      ELSE
        BEGIN
          PART_OF_THE_STRING = :PART_OF_THE_STRING || :PART_OF_THE_STRING_TMP;
        END
    END
  suspend;
END
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38106736
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sorockinalexДело в процедуре сейчас...
+1 к МП.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38106757
sorockinalex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
что значит МП?

запускаю процедуру на выполнение в IBExpert... В окне ввожу данные, нажимаю OK - выполняется...
Делаю то же самое, только на последнем этапе переключаю вкладку на SQL, беру этот текст запроса:
Код: sql
1.
SELECT * FROM SPLITSTRING('1,2,3', ',')


вставляю в построитель запросов - отказывается работать...
в чём дело?
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38106883
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SPLITSTRING('1,2' ; ',')
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38106963
Esperito
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sorockinalexвставляю в построитель запросов - отказывается работать...
в чём дело?В построителе запросов.
Не используй его, напиши запрос руками безо всяких визуализаций.
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38107123
sorockinalex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hvladSPLITSTRING('1,2' ; ',')
в том-то и дело, что по-всякому перепробовал и даже с 'точкой с запятой'
Код: sql
1.
2.
select splitstring.part_of_the_string
from splitstring('1,2';',')


на это выдаёт:
авторInvalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 2, column 23.
;.
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38107316
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sorockinalex,

не надо по-всякому. Надо так, как синтаксис перечисления параметров разрешает.
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38110930
sorockinalex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я же и пишу, что как разрешает делал, отказывается работать, в чём дело кто-нибудь знает?
Код: sql
1.
SELECT * FROM SPLITSTRING('1,2,3', ',')
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38110944
sorockinalex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
с одной входной переменной процедура спокойно вызывается, а когда делаю две входные переменные, то как раз возникает эта ошибка, не пойму в чём дело!!! подскажите уж!
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38110951
sorockinalex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
блин, в крублые скобки надо переменные параметры вписывать....
странно, почему тогда эту ошибку компилятор пропускает!
видимо, недоработка!!!
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38110966
sorockinalex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
блин, совсем не в этом дело было. всё правильно изначально делал... просто процедура большая и в нескольких местах при разных условиях передаются параметры, а компилятор не выдаёт ошибку на конкретном месте, просто не увидел, что на другом листе внизу передавал всего один параметр вместо двух
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38515706
sorockinalex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miwaonlinesorockinalexпропущено...

Спасибо за ссылочку, но ту страничку я и прочитал уже...
кстати, последний запрос почему-то выдаёт одну строку, хотя должен несколько...
Запускаю то же самое в ibexpert - получаю несколько строк...

Код: pascal
1.
2.
3.
      IBQuery.SQL.Add ('select * from EQUIPMENTWITHLATESTNUMBERS (''' +
        shifrEdit.Text + ''',''' + naimEdit.Text + ''',''' + obozEdit.Text + ''',''' +
        numberEdit.Text + ''',''' + birthyearEdit.Text + ''')');


А вот что будет, если вредный юзер введет в shifrEdit.Text что-то типа " 1234'; delete from EQUIPMENTWITHLATESTNUMBERS; " ?
Где почитать конкретно по этому вопросу????
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38515712
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
суровый эстооооонский программист...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38515739
sorockinalex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мимопроходящий, вот бы мимо и проходил, если нечего сказать...
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38515741
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sorockinalex,

Ты по делу пришел? Если указывать кому куда ходить, то дискуссия завершится не начавшись.
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38515745
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sorockinalexГде почитать конкретно по этому вопросу????
нигде. IB/FB в тексте одного запроса исполняет один запрос, а не два, три или более. Другое дело что sql injection (так и искать в гугле) - нехорошо вообще.
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38515978
sorockinalex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kdvsorockinalexГде почитать конкретно по этому вопросу????
нигде. IB/FB в тексте одного запроса исполняет один запрос, а не два, три или более. Другое дело что sql injection (так и искать в гугле) - нехорошо вообще.
вот это уже по делу, спасибо! буду искать! хоть один нормальный попался
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38516025
miwaonline
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvsorockinalexГде почитать конкретно по этому вопросу????
нигде. IB/FB в тексте одного запроса исполняет один запрос, а не два, три или более. Другое дело что sql injection (так и искать в гугле) - нехорошо вообще.
Дмитрий, прошу уточнить (не столько для меня, сколько для подобных ТС-у аксакалов) этот момент, а то можно подумать, что 'select * from sometable; delete * from sometable;' у FB не выполнится. Да, это будут разные запросы, кто ж спорит, но восстановить данные от этого не легче.
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38516049
miwaonline
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miwaonline а то можно подумать, что 'select * from sometable; delete * from sometable;' у FB не выполнится
Упс, с двумя астерисками, конечно, не выполнится; заработался :(
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38516246
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miwaonlineможно подумать, что 'select * from sometable; delete * from sometable;' у
FB не выполнится.
[/b]У FB[/b] - не выполнится. API принципиально сделано так, что выполняет только один
запрос (за исключением ES).
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38516249
miwaonline
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

Проверил. Однако, был неправ, каюсь. Никогда так не делал, так что запомню на будущее :) Был введен в заблуждение тем, что в isql несколько запросов через точку с запятой выполняются без проблем.
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38516253
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miwaonlineв isql
Вот именно, что в isql. У него там отдельный парсер в брюхе, который рубит входящий текст
на куски по терминаторам прежде чем скормит эти куски собственно FB.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Запрос на выод записей.
    #38516278
miwaonline
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

Уже понял. Для интереса проверил где мог - везде, включительно с python+fdb/kinterbase, получаю отлуп типа
Код: plaintext
kinterbasdb.ProgrammingError: (-104, 'isc_dsql_prepare: \n  Dynamic SQL Error\n  SQL error code = -104\n  Token unknown - line 1, column 45\n  delete')
. Так что, еще раз, «Извините, был напуган»©
...
Рейтинг: 0 / 0
118 сообщений из 118, показаны все 5 страниц
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Запрос на выод записей.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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