在Oracle DB中,我需要进行查询以获取某个列的MAX()
,同时在SELECT
语句中还有另一个字段。即。
PRIMARY_KEY_ID | FIELD_A | FIELD_B
---------------------------------------
123 | AFB | 01-JAN-2002
123 | AFB | 02-FEB-2002
123 | AFB | 03-MAY-2002
123 | COB | 15-JAN-2003
123 | COB | 18-DEC-2004
运行以下查询将导致:
SELECT
field_a,
MAX(field_b)
FROM table_a
GROUP BY primary_key_id, field_a
HAVING primary_key_id = 123;
FIELD_A | FIELD_B
----------------------
AFB | 03-MAY-2002
COB | 18-DEC-2004
我的意图是只返回一行:FIELD_B
的最新日期,在本例中为 18-DEC-2004 。但是,由于一对(* PRIMARY_KEY_ID *,* FIELD_A *)将返回两行(因为PRIMARY_KEY_ID是唯一的但FIELD_A
不是),所以结果集不会返回所需的行。
答案 0 :(得分:1)
您需要在primary_key_id
组中找到最大值,然后使用field_b过滤掉结果,该结果等于组内的最大值。希望它有所帮助
select field_a, field_b
from (select field_a,
field_b,
max(field_b) over (partition by primary_key_id) as max_b
from table_a)
where primary_key_id=123
and field_b = max_b;
答案 1 :(得分:0)
您可以尝试使用以下查询
SELECT
field_a,
MAX(field_b) over (partition by primary_key_id)
FROM table_a
where primary_key_id=123;
希望它有助于
Vishad