powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Другие СУБД [игнор отключен] [закрыт для гостей] / Пожалуйста, помогите составить запрос
11 сообщений из 11, страница 1 из 1
Пожалуйста, помогите составить запрос
    #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
Пожалуйста, помогите составить запрос
    #32873981
tru55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Честно говоря, не очень понятна формулировка, что надо получить в результате
...
Рейтинг: 0 / 0
Пожалуйста, помогите составить запрос
    #32874102
Фотография DelphiMen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приведи пример (несколько записей из PLN) чтобы стало понятно чем заполняются поля, какие комбинации значений полей возможны.
...
Рейтинг: 0 / 0
Пожалуйста, помогите составить запрос
    #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
Пожалуйста, помогите составить запрос
    #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
Пожалуйста, помогите составить запрос
    #32874882
SSB777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tru55 SELECT DISTINCT(nistor), result, n
Увы, DISTINCT не подходит - "... повторяющимися считаются записи, содержащие идентичные значения во всех столбцах результирующего набора данных...".
Поле "Result" для одного и того же NIstor бывает разным, и таких записей может быть много, т.к. Result может быть равен "+, -, ? " к тому же N по определению разные, т.е. может существовать много (больше 20...30) записей с одним и тем же "nistor" и разными "Result" и "N" в зависимости от того как часто обследовали пациента в течении периода времени для которого делается выборка.
...
Рейтинг: 0 / 0
Пожалуйста, помогите составить запрос
    #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
Пожалуйста, помогите составить запрос
    #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
Пожалуйста, помогите составить запрос
    #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
Пожалуйста, помогите составить запрос
    #32876227
SSB777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Большое спасибо всем.

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

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

А на счет логики… Спасибо за критику, но наверное, вопрос вида : «Как в результирующий НД с несколькими столбцами включить только одну запись с одинаковым значением какого-либо столбца» имеет право на жизнь.
...
Рейтинг: 0 / 0
Пожалуйста, помогите составить запрос
    #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]