2015-06-15 2 views
1

У меня есть две таблицы: «pc» и «results». таблица «результаты» содержит так много результатов каждого ПК. Мне нужно создать представление, содержащее все столбцы pc и последний результат каждого компьютера. I'v попробовал это, но это не сработало.SQL: создать представление с использованием нескольких таблиц и курсора

select * 
from pc,resultat where pc.code_pc=result.code_pc 
order by code_resultat DESC limit 3 

Должен ли я использовать курсор? если да, то как? Может кто-нибудь, пожалуйста, помогите мне? спасибо advanse

EDIT: PC ID_pc name x y 1 Station1 1 1 2 Station2 2 2

Таблица результатов:

code_rslt ID_pc parametre value date 
1   1  ph   6  15/06/2015 
2   2  ph   6.3 15/06/2015 
3   1  ph   6.6 16/06/2015 
4   2  ph   6.2 16/06/2015 

Мне нужен niew как этот

ID_pc name  x y code_rslt parametre value date 
1  Station1 1 1  3  ph  6.6 16/06/2015 
2  Station2 2 2  4  ph  6.2 16/06/2015 
+0

Что это связано с курсором? Что такое RDBM? что такое «последний результат каждого ПК», можете ли вы предоставить схемы таблиц, образцы данных и ожидаемый результат вашего запроса? – Kritner

+0

, пожалуйста, проверьте мое сообщение Я отредактировал его –

ответ

1

Я думаю, что вы ищете что-то вроде этого:

Select p.*,r.* 
from pc p 
    inner join 
    Results r 
    on p.ID_pc = r.ID_pc 
Where r.Code_reslt = (Select MAX(code_rslt) from results where ID_pc = p.ID_PC) 
+0

Это сработало спасибо sooooooo much –

0

Вы могли бы сделать это:

select r.id_pc, p.name, p.x, p.y, r.code_rslt, r.parametre, r.value, r.date 
from (
    -- Get the max result per PC 
    select max(code_rslt) as code_rslt 
    from result 
    group by id_pc 
) maxPerId 
inner join result r on maxPerId.code_rslt = r.code_rslt -- join maxPerId onto result table, to only include the maximum results 
inner join pc p on r.id_pc = p.id_pc -- join on PC to get the PC information for the max results. 

Я не понимаю, что было для limit 3 в вашем примере запроса, поскольку в вашем фактическом вопросе не упоминалось ничего подобного, так что, надеюсь, это что-то вроде того, что вам нужно.

+0

Большое вам спасибо за вашу помощь, мне жаль, что я не мог ответить на два ответа, потому что этот результат тоже вызывает проблему. хорошо еще раз спасибо за спасение жизни –

0

Вы можете просто решить с помощью следующего запроса выборки:

select t.ID_pc, t.name, t.x, t.y, t.code_rslt, t.parametre, t.value, t.date from 
(
    select p.ID_pc, p.name, p.x, p.y, r.code_rslt, r.parametre, r.value, r.date from pc p 
    left join result r on r.ID_pc=p.ID_pc order by date desc 
) t 
group by t.ID_pc 

Примечание: Если нет результата для ПК, он возвращает эту строку (например, station3) без какого-либо выбранного результата, это означает, что значение для столбцов code_rstl, parameter, ... будет равно null.

В этом запросе по умолчанию оператор 'group by' ищет первую запись (в данном случае последний результат для каждого ПК), поэтому вам не нужно вызывать SQL-функцию max.

+0

Большое вам спасибо за вашу помощь, пожалуйста, можете ли я рассказать мне, как я могу отредактировать этот запрос, чтобы я мог получить все данные в таблице pc и если нет результата для pc, он должен вернуть null? заранее спасибо –

+0

Извините за задержку, я отредактировал свой ответ. – Yashar

Смежные вопросы