首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >同时使用MIN()和MAX()函数

同时使用MIN()和MAX()函数
EN

Stack Overflow用户
提问于 2020-12-02 00:47:52
回答 2查看 78关注 0票数 0

你好,我正在尝试解决一个需要使用MIN()和MAX()问题的问题:

代码语言:javascript
复制
  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

所需输出:

代码语言:javascript
复制
  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值,不管时间是什么。

EN

回答 2

Stack Overflow用户

发布于 2020-12-02 00:50:02

一种方法是使用聚合的相关子查询:

代码语言:javascript
复制
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;

或者,您可以使用窗口函数:

代码语言:javascript
复制
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;
票数 0
EN

Stack Overflow用户

发布于 2020-12-02 01:30:16

您可以使用窗口函数MIN()FIRST_VALUE()来完成此操作

代码语言:javascript
复制
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

结果:

代码语言:javascript
复制
>      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 Hg
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65094816

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档