Кросс-соединение SQL, чтобы использовать максимальное значение для вычисления в выписке без группы по - PullRequest
0 голосов
/ 05 июля 2018

У меня есть следующая таблица:

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

и я хочу выбрать третий столбец с именем timeline, в котором есть оператор case, который возвращает либо 1, если значение mins превышает 80% от значения max mins, И если значение mins больше значения max mins минус 5. У меня есть следующий запрос для этого:

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  
;

В прошлом я использовал перекрестное соединение, чтобы использовать максимальное значение, подобное этому, и это не сработало, но этот запрос говорит мне, что мне нужно использовать группу по запросу для двух других выбранных полей, которые я не делаю хотеть сделать. Как я могу использовать группу?

1 Ответ

0 голосов
/ 05 июля 2018

Я использовал вложенный 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

...