2009-11-10 22 views
8

これは基本的な解決策が必要なように感じますが、私はそれを得ていないようです。SQLグループの注文:

は、このクエリを取る:

  SELECT Category FROM Article 
      GROUP BY Category 

私はこれを効果的に行いたい:

  SELECT Category, DatePublished FROM Article 
      GROUP BY Category 
      ORDER BY DatePublished DESC 

私は本当にDatePublishedを選択する必要はありませんが、それで注文する意味をなすように見えました。それはうまくいかない。

基本的に、最新のDatePublished記事でカテゴリを注文したいと考えています。

答えて

19
SELECT Category 
FROM Article 
GROUP BY 
     Category 
ORDER BY 
     MAX(DatePublished) DESC 

あなたがGROUP BYを行うので、あなたは非グループ化列の上にいくつかの集約関数を実行する必要があります。

MAXは、各カテゴリおよび注文カテゴリに応じて最後に公開された記事の日付を選択します。集計で

6

( - >GROUP BY)、あなただけ集計関数(例えばSUMMAXMIN)及びGROUP BY -clauseに表示されるフィールドと組み合わせて/使用フィールドを選択することができます。

Simpleサンプル:

A | B 
-----+----- 
1 | 2 
1 | 3 

あなたがもたらすであろうSELECT A,B FROM table GROUP BY Aを、書きたい場合:

A | B 
-----+----- 
1 |{2,3} 

が、それが不可能である(Bは、1行に2つの値を持っています!?!)。それらを一緒にグループ化する値Bで何かする必要があります。だから、二つの可能性:

B

SELECT A,MAX(B) FROM TABLE GROUP BY A,B 
に集計関数を使用してください: GROUP BY
SELECT A,B FROM table GROUP BY A,B 

-clause利回り

A | B 
-----+----- 
1 | 2 
1 | 3 

Bを追加

はあなたに同じ引数がORDER BY句に適用されます

A | B 
-----+----- 
1 | 3 

を与えます。

あなたは私が現れた最初のもののような文を書きたいときにABが一緒に(共通サンプル:UserIdUserName)が属していることを知っているかもしれないので、可能性1は、ソリューションです倍の大半が、 RDBMSはそれを知らない!