Извлечение строк из таблицы БД - PullRequest
0 голосов
/ 24 февраля 2020

Ниже моя таблица базы данных.

 RECORDNO| STAGE| COMMENT | STATE
 12      | 1    | abcd    | P
 13      | 1    | adfg    | P
 14      | 2    | adsds   | P
 15      | 2    | defe    | P

Я хочу получить записи, которые имеют State'P 'и stage = stage of минимальный recordno;

SELECT * 
  FROM history 
 WHERE STATE = 'P' 
   AND recordNO = ( SELECT MIN(record#) 
                      FROM history 
                     WHERE STATE = 'P' ) ;

Приведенный выше запрос дает только строку с рекордно 12. Я хочу получить строки с рекордно 12 и 13. Пожалуйста, помогите мне с запросом.

Ответы [ 3 ]

0 голосов
/ 24 февраля 2020

Oracle:

    select * from history
    where stage in 
        ( select stage from history where recordno = 
            ( select min(recordno) from history where state = 'P' )
        );

Демо здесь

0 голосов
/ 24 февраля 2020

Совпадение подзапроса для столбца STAGE с МИНИМУМ STAGE

SELECT h1.* 
  FROM history h1
 WHERE h1.STATE = 'P' 
   AND h1.STAGE = (SELECT MIN(STAGE) FROM history );

или встроенным представлением через ключевое слово JOIN

SELECT h1.* 
  FROM history h1
  JOIN (SELECT MIN(STAGE) AS STAGE FROM history ) h2
    ON h2.STAGE = h.STAGE
 WHERE h1.STATE = 'P'; 

для обеих СУБД ( MySQL & Oracle).

0 голосов
/ 24 февраля 2020

Для MySql используйте это:

SELECT h.* FROM history h
WHERE  h.STATE = 'P' 
   AND h.STAGE = (SELECT STAGE FROM history WHERE STATE = h.STATE ORDER BY RECORDNO LIMIT 1);

Подзапрос в предложении WHERE возвращает минимальную стадию записи. Смотрите демо .

Для Oracle 12c + изменить LIMIT 1 на:

FETCH FIRST 1 ROWS ONLY

См. Демоверсию .

Результаты:

| RECORDNO | STAGE | COMMENT | STATE |
| -------- | ----- | ------- | ----- |
| 12       | 1     | abcd    | P     |
| 13       | 1     | adfg    | P     |
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...