繁体   English   中英

如何在SQL中的单个查询或嵌套查询中获取具有主键ID的Min(某些列值)和具有主键ID的max(某些列值)

[英]How to get Min(some column value) with primary key ID and max(some column value) with primary key ID with in a single query or nested query in SQL

我需要获得两个单独的列的最小值和最大值,以及它们唯一的主键ID值。

有人愿意帮助我吗? 提前致谢!

    select  ID as ID, min(FROMTIME) as FROMTIME,ID as ID,max(TOTIME) as TOTIME,sum(DIFFERENCE_TIME) as DIFFERENCE_TIME   from ( 
  select PersonalBevorzugteArbeitszeiten.PersonalBevorzugteArbeitszeitID ID, zeitvon  FROMTIME ,ZeitBis  TOTIME,DATEDIFF(SECOND,zeitvon,zeitbis) as DIFFERENCE_TIME  from PersonalBevorzugteArbeitszeiten   join personal on personal.PersonalNr  = PersonalBevorzugteArbeitszeiten.PersonalNr   where personal.PersonalNr  = 5  ) as a group by  ID

您可以在子查询中使用窗口函数来获取两列的相关顺序,然后从中进行选择。

with rns as (
   select pk, col1, col2,
   ROW_NUMBER() over (order by col1 desc) rn_max, 
   ROW_NUMBER() over (order by col2 asc) rn_min
)
select pk, 
case when rn_max = 1 then col1 else col2 end as val,
case when rn_max = 1 then 'MAX' else 'MIN' end as max_min 
from rns 
where rn_max = 1 or rn_min = 1

然后您可以在其中使用RANK()或ROW_NUMBER(),具体取决于您要如何处理具有相同值的多个pk( SQL RANK()与ROW_NUMBER()

考虑一个具有3列(PID,Price1,Price2)的表,其中PID是主键

最小值:
1)从TableName中选择PID,Price1,其中Price1 =(从TableName中选择MIN(Price1))
2)从TableName的价格1中选择价格最高的1个PID,价格1

最大值:
1)从TableName中选择PID,Price2,其中Price2 =(从TableName中选择MAX(Price2))
2)按Price2 desc从TableName顺序中选择前1个PID,Price2

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM