SQL: 使用多个表和一个游标创建视图
SQL: Create view using multiple tables and a cursor
我有两个 table:'pc' 和 'results'。 table 'results' 包含每台电脑的这么多结果。
我需要创建包含所有 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
结果table:
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
你可以这样做:
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
在您的示例查询中的用途,因为在您的实际问题中没有提到任何类似的东西 - 希望这是您需要的东西。
我想你要找的是这样的:
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)
您可以使用以下示例查询简单地解决它:
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 没有结果,则 returns 该行(例如 station3)没有任何选择的结果,这意味着列 code_rstl,参数,的值。 .. 将为空。
在此查询中,默认情况下 'group by' 语句正在查找最前面的一条记录(在本例中为每台 PC 的最后结果),因此您无需调用 "max" SQL函数。
我有两个 table:'pc' 和 'results'。 table 'results' 包含每台电脑的这么多结果。 我需要创建包含所有 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
结果table:
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
你可以这样做:
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
在您的示例查询中的用途,因为在您的实际问题中没有提到任何类似的东西 - 希望这是您需要的东西。
我想你要找的是这样的:
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)
您可以使用以下示例查询简单地解决它:
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 没有结果,则 returns 该行(例如 station3)没有任何选择的结果,这意味着列 code_rstl,参数,的值。 .. 将为空。
在此查询中,默认情况下 'group by' 语句正在查找最前面的一条记录(在本例中为每台 PC 的最后结果),因此您无需调用 "max" SQL函数。