SQL:使用多个表和游标创建视图

时间:2015-06-15 16:30:33

标签: sql view

我有两张桌子:' pc'和'结果'。表'结果'包含每台电脑的这么多结果。 我需要创建包含所有pc列的视图以及每台pc的最后结果。 我试过了,但它没有用。

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

我必须使用光标吗?如果有,怎么样?

编辑: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

我需要像这样的

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

3 个答案:

答案 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)

答案 1 :(得分: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是什么,因为在您的实际问题中没有提到这一点 - 所以希望这就像您需要的那样。

答案 2 :(得分: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

注意:如果没有PC的结果,它将返回该行(例如station3)而没有任何选择的结果,这意味着列code_rstl,parametre,...的值将为null。

在此查询中,默认情况下,'group by'语句正在查找前一条记录(在本例中为每台PC的最后结果),因此您无需调用“max”SQL函数。