Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.08.12;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.005 c
1-35377
BlackSun
2002-07-24 20:22
2002.08.12
PostData


3-35155
awaken
2002-07-22 08:40
2002.08.12
MIDAS Server не запускается удаленно


8-35388
all
2002-04-05 16:57
2002.08.12
DirectX


1-35328
valdn
2002-07-25 17:02
2002.08.12
просмотр перед печатью


3-35135
Larisa Perova
2002-07-21 13:48
2002.08.12
Interbase создание триггеров





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский