Как получить значение столбца без использования в предложении GROUP BY - PullRequest
0 голосов
/ 02 мая 2018

Я хочу обновить таблицу VHMAIN, указав самое последнее время, полученное из таблицы VHSTATUS. Я написал запрос, как показано ниже

select a.vehi_id,a.statustime,a.vhstatus,max(b.statustime) 
newstatustime,b.vhstatus newstatus
from vhmain a inner join vhstatus b on a.vehi_id=b.vehi_id2 
group by a.vehi_id,a.statustime,a.vhstatus having 
a.statustime<>max(b.statustime)

Я получаю ошибку как

Столбец vhstatus.vhstatus недопустим в списке выбора, поскольку он не содержится ни в статистической функции, ни в предложении GROUP BY.

Если я добавлю vhstatus.vhstatus в предложение GROUP BY, все данные будут неверными

Пожалуйста, предложите мне запрос

Редактировать: Таблицы и данные ожидаемого результата

VHMAIN
vehi_id   statustime  vhstatus
38        2004-03-08      9

VHSTATUS
vehi_id2  statustime  vhstatus
38        2004-03-11  55  
38        2004-03-08  55  
38        2004-03-08  9

Expected result
vehi_id   statustime  vhstatus    newstatustime newstatus
38        2004-03-08  9            2004-03-11     55

Ответы [ 3 ]

0 голосов
/ 02 мая 2018

Вот как вы можете это сделать:

update VHMAIN
set VHMAIN.vhstatus = VHSTATUS.vhstatus
from VHMAIN
inner join VHSTATUS
on VHMAIN.vehi_id = VHSTATUS.vehi_id2
where VHSTATUS.statustime = (select top 1 vhs.statustime
                             from VHSTATUS.statustime vhs
                             where vhs.vehi_id2 = VHSTATUS.vehi_id2
                             order by vhs.statustime desc);

Приведенный выше непроверенный код будет select элемент с самым последним statustime из VHSTATUS и проверять его по statustime во внешней команде, чтобы вы нашли именно тот элемент, который вы ищете, затем update VHMAIN до vhstatus.

0 голосов
/ 02 мая 2018
select  tbl.*,x.vhstatus from vhstatus x inner join (select 
a.vehi_id,a.statustime,a.vhstatus,max(b.statustime) newstatustime from vhmain a
inner join vhstatus b on a.vehi_id=b.vehi_id2 group by 
a.vehi_id,a.statustime,a.vhstatus  having max(a.statustime) 
<>max(b.statustime)) tbl on tbl.newstatustime=x.statustime and 
tbl.vehi_id=x.vehi_id2  order by tbl.vehi_id
0 голосов
/ 02 мая 2018

Хорошо. Вы пытались сделать вложенный запрос?

например:

select tbl.*, department.Name
from department 
  inner join (
     select departmentId, COUNT(*) cnt
     from employees
     group by departmentId 
) AS tbl on tbl.departmentId = department.Id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...