1

では、次のテーブルがあると仮定します。

レシピ

id (pk)
name
added
modified

レシピバージョン

id (pk)
recipe_id (fk to recipes.id)
version
content
added

私が欲しいのは、最新のrecipe_versions.addedデータを取得してからベースデータと結合するクエリですrecipe。次に、すべての結果をrecipes.added ASC次のように並べ替えますが、group byは、最新のrecipe_versions行を選択しておらず、最初の行を選択しているようです。

SELECT r.`id`,
      r.name,
      rv.version,
      rv.content,
      r.added,
      r.modified,
 FROM recipes r,
      recipe_versions rv
WHERE r.`id` = rv.recipe
GROUP BY rv.recipe
HAVING max(rv.added) 
ORDER BY r.added ASC
4

1 に答える 1

2

このソリューションを使用します。

SELECT
    c.*, b.*
FROM
    (
        SELECT recipe_id, MAX(added) AS mostrecent
        FROM recipe_versions
        GROUP BY recipe_id
    ) a
INNER JOIN
    recipe_versions b ON 
        a.recipe_id = b.recipe_id AND
        a.mostrecent = b.added
INNER JOIN
    recipes c ON a.recipe_id = c.id
ORDER BY
    c.added
于 2012-07-08T06:25:57.980 に答える