SQL Cross join在没有group by的case语句中使用max值进行计算

问题描述 投票:1回答:1

我有下表:

|BoreholeID|Mins|
-----------------
|BH1       |0.5 |
|BH1       |1   |
|BH1       |1.5 |

我想选择一个名为时间轴的第三列,其中有一个case语句,如果mins值大于max mins值的80%并且mins值大于max mins值减去5,则返回1。有以下查询来执行此操作:

select boreholeid, mins,
(case when mins < (max(max_query.maxts)*0.8) and
mins<(max(max_query.maxts)-5) then 1 else 0 end) as Timeline
from maxrawcalcs
cross join
(select max(maxrawcalcs.mins) maxts from maxrawcalcs) as max_query  
;

我过去曾使用交叉连接来使用这样的最大值并且它没有问题,但是这个查询告诉我,我需要使用一个组来查询其他两个我不想做的选定字段。我怎样才能绕组使用?

sql amazon-web-services amazon-athena prestodb
1个回答
0
投票

我使用了嵌套SQL并将您的逻辑保持如下:

select q.boreholeid, q.mins,
      (case when q.mins > ((q.maxts)*0.8) and
                 q.mins > ((q.maxts)-5) 
       then 1 else 0 
       end )         as Timeline
  from
(
select boreholeid, mins, 
       (select max(mins) maxts from maxrawcalcs) as maxts
  from maxrawcalcs
) q;

boreholeid  mins    Timeline
     BH1     0.5        0
     BH1      1         0
     BH1     1.5        1

SQL Fiddle Demo

© www.soinside.com 2019 - 2024. All rights reserved.