1

私はたくさんの列を持つ製品のリストを持っていますが、私の問題にとって最も重要な3つはこれらです(いくつかのランダムなデータを含む):

|--------------------------------------|
| title     | category_id | date       |
| ----------|-------------|------------|
|  Product1 |           1 | 2012-04-18 |
|  Product2 |           1 | 0000-00-00 |
|  Product3 |          17 | 0000-00-00 |
|  Product4 |          17 | 2012-04-10 |
|  Product5 |          17 | 2012-04-20 |
|  Product6 |           1 | 0000-00-00 |
|  Product7 |           2 | 2012-04-20 |
|  Product8 |           2 | 0000-00-00 |
|  Product9 |          17 | 2012-04-16 |
| Product10 |          22 | 2011-11-26 |
| Product11 |          22 | 2011-12-25 |
| Product12 |          30 | 2012-04-01 |
| Product13 |           2 | 2011-12-31 |
| Product14 |          30 | 2010-05-06 |
|--------------------------------------|

同じ商品をcategory_id次々にリストする必要があります(この時点では、「ORDER BY category_id」で解決することもできます)が、date列にも注意する必要category_idがあります。カテゴリ内の商品は次のようになります。降順で並べ替えられているためdatecategory_id最新の製品が一番上にあるなど)、理想的には結果セットは次のようになります(透明性を高めるためにカテゴリ「グループ」間に改行を追加)。

|--------------------------------------|
| title     | category_id | date       |
| ----------|-------------|------------|
|  Product5 |          17 | 2012-04-20 |
|  Product9 |          17 | 2012-04-16 |
|  Product4 |          17 | 2012-04-10 |
|  Product3 |          17 | 0000-00-00 |

|  Product7 |           2 | 2012-04-20 |
| Product13 |           2 | 2011-12-31 |
|  Product8 |           2 | 0000-00-00 |

|  Product1 |           1 | 2012-04-18 |
|  Product2 |           1 | 0000-00-00 |
|  Product6 |           1 | 0000-00-00 |

| Product12 |          30 | 2012-04-01 |
| Product14 |          30 | 2010-05-06 |

| Product11 |          22 | 2011-12-25 |
| Product10 |          22 | 2011-11-26 |
|--------------------------------------|

1つのクエリだけでこの結果セットを取得することは可能でしょうか?また、実用的なソリューションは何でしょうか?

よろしくお願いします、マーセル

4

2 に答える 2

1

サブクエリで各カテゴリの最新の日付を検索し、このサブクエリをテーブルに結合して、次の3つのフィールドで並べ替える必要があります。

SELECT p.* FROM products p
JOIN
( SELECT category_id, MAX(date) as category_date FROM products
  GROUP BY category_id ) pg
ON p.category_id = pg.category_id
ORDER BY pg.category_date DESC, p.category_id, p.date DESC
于 2012-04-25T07:57:11.583 に答える
0

したがって、最初に同じIDを持つ製品のグループ内の最大日付である日付で並べ替え、次にグループ内の日付で並べ替えます。

これを使って:

SELECT title, category_id, date
FROM table_name t
ORDER BY
    (SELECT Max(Date)
     FROM table_name
     WHERE title = t.title
     GROUP BY category_id) DESC,
    date DESC

代わりに、内部SQLクエリでtitleを使用できます。product_id

于 2012-04-25T07:31:45.470 に答える