仅获取数据为最大值的行
Get only rows where data is the max value
我有一个 table 这样的:
treatment | patient_id
3 | 1
3 | 1
3 | 1
2 | 1
2 | 1
1 | 1
2 | 2
2 | 2
1 | 2
我只需要像这样获取 max(treatment)
上的行:
treatment | patient_id
3 | 1
3 | 1
3 | 1
2 | 2
2 | 2
patient_id
1 max(treatment)
是 3
patient_id
2 max(treatment)
是 2
例如,您可以使用最大值加入聚合 table:
select t.*
from tmp t
inner join (
select max(a) max_a, b
from tmp
group by b
) it on t.a = it.max_a and t.b = it.b;
Here's 数据库 fiddle.
试试这个:
WITH list AS
( SELECT patient_id, max(treatment) AS treatment_max
FROM your_table
GROUP BY patient_id
)
SELECT *
FROM your_table AS t
INNER JOIN list AS l
ON t.patient_id = l.patient_id
AND t.treatment = l.treatment_max
您可以使用 rank
:
with u as
(select *, rank() over(partition by patient_id order by treatment desc) r
from table_name)
select treatment, patient_id
from u
where r = 1;
使用相关子查询
select t1.* from table_name t1
where t1.treatment=( select max(treatment) from table_name t2 where t1.patient_id=t2.patient_id
)
我有一个 table 这样的:
treatment | patient_id
3 | 1
3 | 1
3 | 1
2 | 1
2 | 1
1 | 1
2 | 2
2 | 2
1 | 2
我只需要像这样获取 max(treatment)
上的行:
treatment | patient_id
3 | 1
3 | 1
3 | 1
2 | 2
2 | 2
patient_id
1 max(treatment)
是 3
patient_id
2 max(treatment)
是 2
例如,您可以使用最大值加入聚合 table:
select t.*
from tmp t
inner join (
select max(a) max_a, b
from tmp
group by b
) it on t.a = it.max_a and t.b = it.b;
Here's 数据库 fiddle.
试试这个:
WITH list AS
( SELECT patient_id, max(treatment) AS treatment_max
FROM your_table
GROUP BY patient_id
)
SELECT *
FROM your_table AS t
INNER JOIN list AS l
ON t.patient_id = l.patient_id
AND t.treatment = l.treatment_max
您可以使用 rank
:
with u as
(select *, rank() over(partition by patient_id order by treatment desc) r
from table_name)
select treatment, patient_id
from u
where r = 1;
使用相关子查询
select t1.* from table_name t1
where t1.treatment=( select max(treatment) from table_name t2 where t1.patient_id=t2.patient_id
)