0

我想查询这样的事情:

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吗?如果是,如何?

所以它是这样工作的:每次我编辑“reparacoes”行(在我的网站上)时,我都会创建INSERT一个新的(我没有UPDATE)并创建一个新的 ID 以及一个 edit_data(这是编辑的日期时间) 但 id_reparacoes 保持不变。

我想要一个从 reparacoes 返回 ID 的查询,其中 edit_data 是给定 id_reparacao 的最新版本。但我有不止一个 id_reparacao,我希望它查询所有 id_reparacao(这就是我尝试的原因...where id_reparacao= (select id_reparacao from reparacoes)

PS:对不起,我知道这已经被质疑/回答了很多次,但我找不到任何可以帮助我的东西。

4

5 回答 5

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_dataper id_reparacao,然后通过执行并INNER JOIN返回表,您将行限制为仅Edit_data与最新 per 匹配的行id_reparacao

于 2013-06-27T11:41:31.913 回答
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)
        );
于 2013-06-27T11:27:11.510 回答
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)
于 2013-06-27T11:30:29.540 回答
0

我想你想要的是这样的:

SELECT id
 FROM reparacoes
 WHERE edit_data = (
   SELECT max(edit_data)
   FROM reparacoes
);
于 2013-06-27T11:31:26.000 回答
-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);
于 2013-06-27T11:36:58.803 回答