我有两张桌子:' 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
答案 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函数。