-1

以下のこのクエリは、...の結果を生成するのに最適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

多分私もそれをすべて間違っています。

4

2 に答える 2

0

次のようにすると、望ましい結果が得られると思います。

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
于 2013-03-20T00:41:07.937 に答える
0

私があなたの質問を理解しているなら、次のようなものが近いはずです:

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

MAX を最新の 2 つのベイヤー フィールドのみに制限する 1 つのオプションは、結果に行番号を追加し、行 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
于 2013-03-20T00:40:54.187 に答える