我想查询这样的内容:
SELECT id
FROM reparacoes
WHERE edit_data= (select max(edit_data)
from reparacoes
where id_reparacao= (select id_reparacao from reparacoes));
但是子查询select id_reparacao from reparacoes
返回的行数超过1行(如预期的那样)并且查询不起作用。我应该用joins
执行此操作吗?如果有,怎么样?
所以这是它的工作原理:每当我编辑一个“遣返”行(在我的网站上)时,我INSERT
一个新的(我不UPDATE
)并创建一个新的ID以及edit_data(编辑的日期时间),但id_reparacoes保持不变。
我想要一个返回来自repracoes的ID的查询,其中edit_data是给定id_reparacao中最新的。但我有一个以上的id_reparacao,我希望这个查询所有id_reparacao(这就是为什么我尝试...where id_reparacao= (select id_reparacao from reparacoes)
答案 0 :(得分:3)
我想你想要这样的东西:
SELECT rep.ID
FROM reparacoes rep
INNER JOIN
( SELECT id_reparacao, MAX(Edit_Data) AS Edit_Data
FROM reparacoes
GROUP BY id_reparacao
) MaxRep
ON MaxRep.id_reparacao = rep.id_reparacao
AND MaxRep.Edit_Data = rep.Edit_Data;
子查询只是获得每edit_data
的最后一个id_reparacao
,然后通过执行INNER JOIN
返回到表,您将行限制为仅Edit_data
匹配的行最新的每id_reparacao
答案 1 :(得分:0)
如果内部查询返回多行,请使用in
代替=
。
SELECT id
FROM reparacoes
WHERE edit_data in
(select max(edit_data)
from reparacoes
where id_reparacao in
(select id_reparacao from reparacoes)
);
答案 2 :(得分:0)
我不确定我是否完全理解您希望查询返回的内容。如果你用文字描述你的目标,这可能有所帮助。
如果您想获取每个不同id_reparacao的最大编辑数据的ID,请尝试以下操作:
SELECT id
FROM reparacoes outerquery
WHERE edit_data = (SELECT max(edit_data)
FROM reparacoes innerquery
WHERE innerquery.id_reparacao = outerquery.id_reparacao)
答案 3 :(得分:0)
我猜你想要的是这个:
SELECT id
FROM reparacoes
WHERE edit_data = (
SELECT max(edit_data)
FROM reparacoes
);
答案 4 :(得分:-1)
如果要比较单列数据,请使用以下查询:
SELECT id FROM reparacoes WHERE edit_data= (select max(edit_data) from reparacoes);
如果要从多个记录进行比较,请使用以下查询:
SELECT id FROM reparacoes WHERE edit_data IN (select edit_data from reparacoes);