7

雑誌がいっぱいのテーブルがあり、各雑誌の最新のユニークな号を抽出する必要があります。

私はもう試した

    SELECT DISTINCT
    magazine
        FROM
    product p
        INNER JOIN
    (SELECT 
        title, MAX(onSale) AS Latest
    FROM
        product
    GROUP BY magazine) groupedp

これは個別の雑誌を返しますが、必要な残りのデータは返しません。

アップデート:

スキーマ

-id----onsale----magazine
  1    1/12/12   Fishing Mag
  2    1/11/12   Fishing Mag
  3    12/03/11  Pencil Sharpening Monthly
  4    1/02/10   Pencil Sharpening Monthly
  5    16/04/09  Homes in the Sky

したがって、返される結果は次のようになります。

 -id----onsale----magazine
   1    1/12/12   Fishing Mag         
   3    12/03/11  Pencil Sharpening Monthly         
   5    16/04/09  Homes in the Sky
4

5 に答える 5

12
SELECT 
    p.*
FROM
        product p
    INNER JOIN
        ( SELECT 
              magazine, MAX(onSale) AS latest
          FROM
              product
          GROUP BY 
              magazine
        ) AS groupedp
      ON  groupedp.magazine = p.magazine
      AND groupedp.latest = p.onSale ;
于 2012-07-11T14:17:37.030 に答える
9
SELECT id, MAX(onSale) as latest, magazine
FROM product
GROUP BY magazine
ORDER BY latest DESC
于 2012-07-11T14:49:30.607 に答える
3

与えられた答えはどれも正しくありません。それらは、1つの正確な行を表していない関連付けられていないデータのセットを返すからです。は、値と同じ行からのものでidはない可能性があります。idonsale

以下が機能します。

SELECT
    id, onsale, magazine
FROM (
    SELECT
       id, onsale, magazine
    FROM
        product
    ORDER BY
        onsale DESC) AS a
GROUP BY
    magazine
于 2019-08-02T03:55:52.573 に答える
2

これはあなたが必要とするもののように見えます:

SELECT id, MAX(onsale) AS onsale, magazine FROM magazines GROUP BY magazine ORDER BY onsale DESC;

でそれをチェックしてください:

http://sqlfiddle.com/#!2/38e78/3

更新: MAX(onsale)を返すように、クエリを少し変更しました

于 2012-07-11T14:38:01.753 に答える
-1

「残りのデータ」を最初の選択に入れる必要があります。

SELECT DISTINCT magazine, "rest of data"
FROM product p 
INNER JOIN 
( SELECT title, MAX(onSale) AS Latest 
FROM product 
GROUP BY magazine ) groupedp
于 2012-07-11T13:52:37.960 に答える