Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.08.12;
Скачать: CL | DM;

Вниз

Вопрос по вложеным запросам   Найти похожие ветки 

 
Daiz13 ©   (2002-07-19 12:44) [0]

Есть таблица следующего содержания

SERNUM TOTALENERGY DAYTIME
========== =========== ===========

13 1501 17-JUL-2002
13 1506 18-JUL-2002
13 1511 19-JUL-2002
14 1389 17-JUL-2002
14 1397 18-JUL-2002
14 1405 19-JUL-2002
15 1441 17-JUL-2002
15 1451 18-JUL-2002
15 1461 19-JUL-2002
16 1460 17-JUL-2002
16 1465 18-JUL-2002
16 1470 19-JUL-2002

Нужно для каждого номера вывести разницу TOTALENERGY за определенный период, приблизительно так:

SERNUM ENERGY
========== ===========

13 24
14 21
15 21
16 21

Делаю такой запрос:

SELECT DISTINCT M.SERNUM ,
(SELECT TOTALENERGY FROM MEASURES WHERE ID=(SELECT MAX(ID) FROM MEASURES WHERE sernum=M.SERNUM AND daytime<="24.06.2002")) -
(SELECT TOTALENERGY FROM MEASURES WHERE ID=(SELECT MIN(ID) FROM MEASURES WHERE sernum=M.SERNUM AND daytime>="20.06.2002") ) AS ENERGY
FROM MEASURES M
WHERE
( M.sernum="13" or M.sernum="14") AND
( M.daytime>="20.06.2002" AND M.daytime<="24.06.2002" )

Получаю ошибку:
invalid request BLR at offset 316
-context already in use (BLR error)

Без DISTINCT работает, но каждый номер выводиться несколько раз.
Почему то кажеться что я пошел не тем путем, может правильнее сделать это через хранимую процедуру?

Плюс так и не понял как ограничить количество возвращаемых строк, пришлось извращаться через min & max.


 
Alexandr ©   (2002-07-19 13:17) [1]

ХП решит все проблемы в данном случае...


 
Daiz13 ©   (2002-07-19 13:28) [2]

А как указать количество возвращаемых строк, должен же быть какой-то LIMIT или что-то похожее


 
Alexandr ©   (2002-07-19 13:42) [3]

в IB5 нету.
в Firebird есть.
А если ХП делать будешь, так и передавай ей скока строк результата выдать... В чем проблема?


 
Daiz13 ©   (2002-07-19 14:50) [4]

Проблема в том, что заранее неизвестно условие по которому делаеться выборка (все номера, один номер, десять номеров). Через ХП никак е получиться.


 
Alexandr ©   (2002-07-19 14:53) [5]

кто сказал никак?
А что табличку нельзя для этого заполнить например...
Или стрингом передать?


 
Daiz13 ©   (2002-07-22 11:03) [6]

А разве можно в ХП строковым параметром передать часть условия WHERE?
И как потом заставить ХП обработать строку "( M.sernum="13" or M.sernum="14")" как часть sql кода?


 
Alexandr ©   (2002-07-22 11:14) [7]

where existsInString(m.sernum,strval)


existsInString это UDF


 
Desdechado ©   (2002-07-22 11:18) [8]

часть запроса НЕЛЬЗЯ!
а вот строку передать, внутри ХП разобрать ее на запчасти, запхать в переменные и подставить как параметры



Страницы: 1 вся ветка

Текущий архив: 2002.08.12;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.015 c
7-35482
[ KGB ] GENERAL
2002-05-26 23:22
2002.08.12
Интересный вопрос!!!


3-35157
Прытков В.А.
2002-07-21 03:29
2002.08.12
Скорость Apollo VCL 5.2


14-35438
ricks
2002-07-05 18:48
2002.08.12
И все-таки DirectSound FX


14-35468
Lola
2002-07-15 17:08
2002.08.12
Советую обратить внимание начинающим и не очень.


1-35238
ilg
2002-07-30 16:55
2002.08.12
Компонент на основе TLabel