你好,我正在尝试解决一个需要使用MIN()和MAX()问题的问题:
ID | Date | Field | BP
1111111| 2020-08-12 07:10:00.000 | Systolic | 138 mm Hg
1111111| 2020-08-12 07:10:00.000 | Diastolic| 85 mm Hg
1111111| 2020-11-10 12:02:00.000 | Systolic | 153 mm Hg
1111111| 2020-11-10 12:02:00.000 | Diastolic| 87 mm Hg
1111111| 2020-11-10 12:03:00.000 | Systolic | 142 mm Hg
1111111| 2020-11-10 12:03:00.000 | Diastolic| 82 mm Hg
1111111| 2020-11-10 12:14:00.000 | Systolic | 132 mm Hg
1111111| 2020-11-10 12:14:00.000 | Diastolic| 84 mm Hg
2222222| 2020-11-12 08:51:00.000 | Systolic | 158 mm Hg
2222222| 2020-11-12 08:51:00.000 | Diastolic| 92 mm Hg
2222222| 2020-11-13 11:30:00.000 | Systolic | 140 mm Hg
2222222| 2020-11-13 11:30:00.000 | Diastolic| 85 mm Hg所需输出:
ID | Date | Field | BP
1111111| 2020-11-10 12:14:00.000 | Systolic | 132 mm Hg
1111111| 2020-11-10 12:03:00.000 | Diastolic| 82 mm Hg
2222222| 2020-11-13 11:30:00.000 | Systolic | 140 mm Hg
2222222| 2020-11-13 11:30:00.000 | Diastolic| 85 mm Hg我正在尝试编写一个查询,它将为我提供每个ID的最大/最新日期,但同时也是BP的最小/最小值。因此,对于每个ID,查询应该给出最大日期和最小BP值。
问题中有两种情况: Case1:一些ID在同一日期但在不同的时间有多个BP值。因此,在这种情况下,我希望获得该最新日期的收缩压和舒张压的最小BP值,而不考虑时间。
案例二:一些ID只有一套收缩压和舒张压。因此,在这种情况下,我也希望得到最小/最小的收缩压和舒张压的最小BP值,不管时间是什么。
发布于 2020-12-02 00:50:02
一种方法是使用聚合的相关子查询:
select id, date, field, min(dp)
from t
where t.date = (select max(t2.date) from t t2 where t2.id = t.id)
group by id, date, field;或者,您可以使用窗口函数:
select t.*
from (select t.*,
row_number() over (partition by id order by date desc, bp asc) as seqnum
from t
) t
where seqnum = 1;发布于 2020-12-02 01:30:16
您可以使用窗口函数MIN()和FIRST_VALUE()来完成此操作
SELECT DISTINCT ID,
FIRST_VALUE(Date) OVER (PARTITION BY ID, Field ORDER BY TRY_CAST(LEFT(BP, CHARINDEX(' ', BP) - 1) AS INTEGER)) Date,
Field,
CONCAT(MIN(TRY_CAST(LEFT(BP, CHARINDEX(' ', BP) - 1) AS INTEGER)) OVER (PARTITION BY ID, Field), ' mm Hg') BP
FROM tablename请参阅demo。
结果:
> ID | Date | Field | BP
> ------: | :---------------------- | :-------- | :--------
> 1111111 | 2020-11-10 12:03:00.000 | Diastolic | 82 mm Hg
> 1111111 | 2020-11-10 12:14:00.000 | Systolic | 132 mm Hg
> 2222222 | 2020-11-13 11:30:00.000 | Diastolic | 85 mm Hg
> 2222222 | 2020-11-13 11:30:00.000 | Systolic | 140 mm Hghttps://stackoverflow.com/questions/65094816
复制相似问题