如何扩展MySQL子查询/联接以包含所有行

如何扩展MySQL子查询/联接以包含所有行,mysql,join,subquery,Mysql,Join,Subquery,下面的查询非常适合生成horse_id=1的结果。。。但我想对数据库中的所有马都这样做。谁能和我分享一下如何调整这个查询以便我可以这样做 SELECT figures.entry_id, max(figures.beyer) FROM ( SELECT hrdb_lines.horse_id, hrdb_entries.entry_id, hrdb_lines.beyer

下面的查询非常适合生成horse_id=1的结果。。。但我想对数据库中的所有马都这样做。谁能和我分享一下如何调整这个查询以便我可以这样做

SELECT  figures.entry_id,
        max(figures.beyer)
FROM
        ( SELECT  hrdb_lines.horse_id,
                  hrdb_entries.entry_id,
                  hrdb_lines.beyer
          FROM hrdb_entries
            INNER JOIN hrdb_lines 
                ON hrdb_lines.horse_id = hrdb_entries.horse_id
          WHERE hrdb_lines.horse_id = 1
          ORDER BY hrdb_lines.line_date DESC
          LIMIT 2
        ) as figures

也许我也做错了。

如果我理解你的问题,像这样的事情应该很接近:

SELECT
    figures.horse_id,
    figures.entry_id,
    max(figures.beyer)
FROM
    (SELECT
        hrdb_lines.horse_id,
        hrdb_entries.entry_id,
        hrdb_lines.beyer
    FROM hrdb_entries
        INNER JOIN hrdb_lines ON hrdb_lines.horse_id = hrdb_entries.horse_id
    ORDER BY hrdb_lines.line_date DESC
    ) as figures
GROUP BY figures.horse_id
将最大值限制为最近2个beyer字段的一个选项是向结果中添加行号,并且只包括第1行和第2行

SELECT
    figures.horse_id,
    figures.entry_id,
    max(figures.beyer)
FROM
    (SELECT
        @rn:=if(@prev_horse_id=horse_id,@rn+1,1) rn,
        hrdb_lines.horse_id,
        hrdb_entries.entry_id,
        hrdb_lines.beyer,
        @prev_horse_id:=hrdb_lines.horse_id
    FROM hrdb_entries
        INNER JOIN hrdb_lines ON hrdb_lines.horse_id = hrdb_entries.horse_id
        INNER JOIN (SELECT @rn:=0) r
    ORDER BY hrdb_lines.horse_id, hrdb_lines.line_date DESC
    ) as figures
WHERE rn <= 2
GROUP BY figures.horse_id

我认为以下几点将产生预期的结果:

SELECT `entry_id`, `beyer`
FROM (SELECT hrdb_entries.entry_id,
        MAX( hrdb_lines.beyer )
    FROM hrdb_entries
    INNER JOIN hrdb_lines 
        ON hrdb_lines.horse_id = hrdb_entries.horse_id
    GROUP BY hrdb_lines.horse_id
    ORDER BY hrdb_lines.line_date DESC
    ) AS figures

将WHERE hrdb_lines.horse_id=1更改为GROUP BY hrdb_lines.horse_id,这样应该可以工作。这更改了结果,但问题是我限制为2的查询用于获取最近的两个结果。在分组时,只需吐出一个随机输入的id和maxfigures。beyer。。。如果这有意义的话,这肯定更接近了。我本应该更清楚,但限制是基本上从最近的两行中获取更高的beyer。这个查询提供了数据库中除最近两行之外的所有行的最大值。@TravisVOX-请参见上面的编辑。我引入了一个行号变量,如果我理解的话,它应该会产生您再次寻找的结果。希望这能有所帮助。我实现了您的建议,但它仍然没有将最大值限制为字段限制的两行?如果我更改WHERE rn@TravisVOX-我写代码太快-If语句应该是:if@prev_horse_id=horse_id,@rn+1,1,并通过将horse_id添加到订单中。祝你好运