从数据库表中获取行

时间:2020-02-24 17:32:16

标签: mysql sql oracle

下面是我的数据库表。

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

我想获取状态为'P'且stage =最小记录编号为stage的记录;

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

上面的查询仅给出记录为12的行。我想获取记录为12和13的行。 请帮我查询。

3 个答案:

答案 0 :(得分:0)

对于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子句中的子查询返回最小记录号的阶段。
请参见demo

对于Oracle 12c +,将LIMIT 1更改为:

FETCH FIRST 1 ROWS ONLY

请参见demo

结果:

| RECORDNO | STAGE | COMMENT | STATE |
| -------- | ----- | ------- | ----- |
| 12       | 1     | abcd    | P     |
| 13       | 1     | adfg    | P     |

答案 1 :(得分:0)

Oracle:

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

演示here

答案 2 :(得分:0)

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'; 
对于两个DBMS( MySQL Oracle )。

相关问题