Как использовать группу по функции в выбранном запросе - PullRequest
0 голосов
/ 20 сентября 2019

У меня есть запрос, и мне нужно проверять мин (темп) от автомобиля каждые десять минут.Поэтому мне нужно написать подзапрос в запросе выбора.

select vehicle_no,
location,
temp,
(select min(temp)
 from vehicle_mst
 where company_id = 100
 and vehicle_no = 'abcd'
 and sys_time between to_date('20/09/2019 00:00','dd/mm/yyyy hh24:mi') 
              and to_date('20/09/2019 00:00','dd/mm/yyyy hh24:mi') +10/1440 min_temp,
company_name
from vehicle_mst
where company_id = 100
and vehicle_no = 'abcd'
and sys_time between to_date('20/09/2019 00:00','dd/mm/yyyy hh24:mi') 
             and to_date('21/09/2019 00:00','dd/mm/yyyy hh24:mi')


select vehicle_no,
location,
temp,company_name
from vehicle_mst
where company_id = 100
and vehicle_no = 'abcd'
and sys_time between to_date('20/09/2019 00:00','dd/mm/yyyy hh24:mi') 
             and to_date('21/09/2019 00:00','dd/mm/yyyy hh24:mi')

этот запрос работает, но если я напишу подзапрос для этого, это не работает.

ORA-00937: not a single-group group function
00937. 00000 -  "not a single-group group function"

Ответы [ 2 ]

0 голосов
/ 20 сентября 2019

Вы можете получить десятиминутные интервалы, отформатировав дату и время в что-то вроде '2019-09-20 09:13' и удалив последнюю цифру.

select 
  vehicle_no,
  location,
  substr(to_char(sys_time, 'yyyy-mm-dd hh24:mi'), 1, 15) || 'x' as time,
  min(temp) as min_temp
from vehicle_mst
where company_id = 100
and sys_time >= date '2019-09-20' and sys_time < date '2019-09-21'
group by 
  vehicle_no,
  location,
  substr(to_char(sys_time, 'yyyy-mm-dd hh24:mi'), 1, 15)
order by 
  vehicle_no,
  location,
  substr(to_char(sys_time, 'yyyy-mm-dd hh24:mi'), 1, 15);

Это даст вам 20 сентября 2019 года за десятьминутные интервалы.

Если вы хотите это для каждого транспортного средства, и для транспортного средства могут быть различные местоположения, вам придется удалить location из запроса.

Если вы хотите это для одноготолько для транспортного средства, поместите его в предложение where (и затем вы можете удалить vehicle_no из группы по пунктам by и order by).

0 голосов
/ 20 сентября 2019

Вам нужна простая группа по выражению, как показано ниже -

select vehicle_no
      ,location
      ,temp
      ,to_date(sys_time, 'dd/mm/yyyy hh24:mi') +10/1440
      ,min(temp) min_temp
      ,company_name
from vehicle_mst
where company_id = 100
and vehicle_no = 'abcd'
and sys_time between to_date('20/09/2019 00:00','dd/mm/yyyy hh24:mi')
                 and to_date('20/09/2019 00:00','dd/mm/yyyy hh24:mi')
group by vehicle_no
        ,location
        ,temp
        ,company_name
        ,to_date(sys_time, 'dd/mm/yyyy hh24:mi') +10/1440

Хотя я не пробовал, но это должно работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...