下面是我的数据库表。
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的行。 请帮我查询。
答案 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)