Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Другие СУБД [игнор отключен] [закрыт для гостей] / Пожалуйста, помогите составить запрос / 11 сообщений из 11, страница 1 из 1
20.01.2005, 10:02
    #32873808
SSB777
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пожалуйста, помогите составить запрос
Имеется таблица Paradox pln.db:

Код: plaintext
1.
2.
3.
4.
5.
6.
N      - автоинкрементное поле
MyKey    - I       (LongInteger)
OP      - A[ 6 ]  (string  - результат измерения)
Result  - A[ 13 ] (string - результат анализа)
NIstor  - A[ 27 ] (string - номер истории болезни пациента) 
. . .

Для одной истории болезни может быть несколько записей (анализов с разными результатами и по разным методикам )
Существует запрос:
Код: plaintext
1.
2.
3.
SELECT NIstor, Result, N 
FROM pln
WHERE MyKey= 110  AND OP is not NULL and NIstor is not NULL
Но этот запрос не годится, так как требуется получить выборку, в которой значение поля NIstor встречается один раз для учета обследованных лиц.
Использование DISTINCN не решает проблемы, т.к. поле N - уникальное.
...
Рейтинг: 0 / 0
20.01.2005, 10:55
    #32873981
tru55
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пожалуйста, помогите составить запрос
Честно говоря, не очень понятна формулировка, что надо получить в результате
...
Рейтинг: 0 / 0
20.01.2005, 11:24
    #32874102
DelphiMen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пожалуйста, помогите составить запрос
Приведи пример (несколько записей из PLN) чтобы стало понятно чем заполняются поля, какие комбинации значений полей возможны.
...
Рейтинг: 0 / 0
20.01.2005, 12:22
    #32874302
SSB777
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пожалуйста, помогите составить запрос
привожу пример нескольких записей из pln:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
N            MyKey           OP         Result     Nistor
 9734           110              0 . 393          +        s00432
 9735           110              1 . 181          -         s00433
 9736           110             Null         Null       Null                          
. . .         . . .        . . .        . . .       . . . 
 9840           130              0 . 221          ?         s00432
. . .         . . .        . . .        . . .       . . .
 9900           110             1 . 888           +         s00432

в результате запроса должна получить:
Код: plaintext
1.
2.
3.
N         Result        Nistor
 9734        +            s00432
 9735        -            s00433

т.е. Запись с N=9734 нужна, а запись с N=9900 не нужна, должна быть только одна запись с NIsor=s00432, в принципе не важно будет это первая запись, последняя или любая другая, главное чтобы ОДНА.
...
Рейтинг: 0 / 0
20.01.2005, 13:18
    #32874539
tru55
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пожалуйста, помогите составить запрос
Попробуй

Код: plaintext
1.
2.
3.
4.
5.
6.
SELECT DISTINCT(nistor), result, n
FROM pln
WHERE (mykey =  110 ) AND
          (op is not null) AND
          (nistor is not null) AND
          (ROWNUM <=  2 )
...
Рейтинг: 0 / 0
20.01.2005, 14:40
    #32874882
SSB777
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пожалуйста, помогите составить запрос
tru55 SELECT DISTINCT(nistor), result, n
Увы, DISTINCT не подходит - "... повторяющимися считаются записи, содержащие идентичные значения во всех столбцах результирующего набора данных...".
Поле "Result" для одного и того же NIstor бывает разным, и таких записей может быть много, т.к. Result может быть равен "+, -, ? " к тому же N по определению разные, т.е. может существовать много (больше 20...30) записей с одним и тем же "nistor" и разными "Result" и "N" в зависимости от того как часто обследовали пациента в течении периода времени для которого делается выборка.
...
Рейтинг: 0 / 0
20.01.2005, 15:18
    #32875017
tru55
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пожалуйста, помогите составить запрос
Тогда так

Код: 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.
SELECT n, result, nistor
FROM hr2.a1
WHERE (mykey =  110 ) AND
      (op is not null) AND
      (nistor is not null) AND
      (result = '+') AND
      (ROWNUM <=  1 )

UNION

SELECT n, result, nistor
FROM hr2.a1
WHERE (mykey =  110 ) AND
      (op is not null) AND
      (nistor is not null) AND
      (result = '-') AND
      (ROWNUM <=  1 )

UNION

SELECT n, result, nistor
FROM hr2.a1
WHERE (mykey =  110 ) AND
      (op is not null) AND
      (nistor is not null) AND
      (result = '?') AND
      (ROWNUM <=  1 )

...
Рейтинг: 0 / 0
20.01.2005, 15:26
    #32875047
DelphiMen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пожалуйста, помогите составить запрос
А чем собственно запись 9900 хуже записи 9734? Не факт что в результате выполнения некоторого запроса вы получите записи 9734 и 9735, а не 9900 и 9735. Соответственно результатом могут быть 2 набора:
s00432, +, 9734
s00433, -, 9735
или
s00432, +, 9900
s00433, -, 9735
Так может быть просто использовать
Код: plaintext
1.
2.
SELECT DISTINCT(NIstor)
FROM pln
WHERE MyKey= 110  AND OP is not NULL and NIstor is not NULL
А вообще проблема заключается в логическом построении вашего приложения.
...
Рейтинг: 0 / 0
21.01.2005, 06:16
    #32876053
golsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пожалуйста, помогите составить запрос
select nistor, min(N), min(Result) from pln group by nistor
Правда это не запись выдергивает: N и Result могут из разных записей подтянуться.
Если уж непременно надо из одной записи:
select nistor, N, Result from pln where N in (select min(N) from pln group by nistor)

Естественно вместо min можно max использовать.
...
Рейтинг: 0 / 0
21.01.2005, 09:35
    #32876227
SSB777
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пожалуйста, помогите составить запрос
Большое спасибо всем.

Последний запрос - то что нужно.
Код: plaintext
1.
SELECT nistor, result from pln where N in (select min (N) from pln group by nistor)
Изящно и быстро.

DelphiMenА вообще проблема заключается в логическом построении вашего приложения.

А на счет логики… Спасибо за критику, но наверное, вопрос вида : «Как в результирующий НД с несколькими столбцами включить только одну запись с одинаковым значением какого-либо столбца» имеет право на жизнь.
...
Рейтинг: 0 / 0
22.01.2005, 15:41
    #32878586
savosin_sergey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пожалуйста, помогите составить запрос
а select top 1 ... from ... where... не подходит?
...
Рейтинг: 0 / 0
Форумы / Другие СУБД [игнор отключен] [закрыт для гостей] / Пожалуйста, помогите составить запрос / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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