1

それは同じ質問ではありません: GROUP BY 内で LIMIT を使用して、グループごとに N 個の結果を取得しますか?

しかし、私はそれが似ていることを認めます。

1 人あたり最初の 2 行を選択する必要があります。行は受領年順に並べられています

問題 : 同じ月に 2 つのデータが入力された可能性があります (日付は YYYY-MM を入力)

私が持ってきた(参照された質問に続く)クエリは、大きなループに陥っています。

SELECT *
FROM `table_data` as b
WHERE (
    SELECT count(*) FROM `table_data` as a
        WHERE a.Nom = b.Nom and a.year < b.year
    ) <= 2;

サンプルデータ :

  A  |   year   |  Nom
---------------------
  b  |  2011-01 | Tim
---------------------
  d  |  2011-01 | Tim
---------------------
  s  |  2011-01 | Tim
---------------------
  a  |  2011-03 | Luc
---------------------
  g  |  2011-01 | Luc
---------------------
  s  |  2011-01 | Luc

エクスポートする必要があります:

  A  |   year   |  Nom
---------------------
  b  |  2011-01 | Tim
---------------------
  d  |  2011-01 | Tim
---------------------
  a  |  2011-03 | Luc
---------------------
  g  |  2011-01 | Luc
4

1 に答える 1

1
(
 -- 最初に、それぞれの最新のエントリのみが必要であるかのように、一連の結果を取得します。
 -- name - ORDER BY を使用した派生テーブルからの単純な GROUP BY
  選択する *
  から (
    選択する *
    FROM `テーブルデータ`
    ORDER BY `year` DESC
  ) `a`
  GROUP BY `Nom`
)
連合
(
 -- 次に、同じ基準を適用した場合に得られる一連の結果と結合します。
 -- さらに、
 -- 最初の操作
  選択する *
  から (
    選択する *
    FROM `テーブルデータ`
    WHERE `id` NOT IN (
      SELECT `ID`
      から (
        選択する *
        FROM `テーブルデータ`
        ORDER BY `year` DESC
      ) `a`
      GROUP BY `Nom`
    )
    ORDER BY `year` DESC
  ) `b`
  GROUP BY `Nom`
)
 -- 必要に応じて、最終結果に順序を適用します
ORDER BY `Nom` DESC、`year` DESC

より短い方法があると確信していますが、今のところ、それが何であるかを理解することはできません. ただし、それは機能します-主キー(必要)があり、それが呼び出されていると仮定しますid

于 2012-06-22T16:11:19.297 に答える