2011-02-08 9 views
1

クエリで集約カラムを省略することはできますか?例:SQLクエリで集約カラムを省略する

SELECT Id, Description, MAX(Created) 
FROM Record 
GROUP BY Id, Description 

結果セットからMAX(作成済み)列を省略するにはどうすればよいですか? このクエリはサブクエリで使用されていますので、最新のレコードに参加して古いレコードを省略できます。私はそれが大きな違いをもたらさないことを知っていますが、一般的に私の練習は必要なデータを取り戻すことだけでした。この場合、最新のレコードに参加してその説明を引き出したいと思います。私は実際に日付が何であるか気にしない。

どのような考えですか?私はあまりにも気難しいですか?

+1

なぜクエリを書き直して集計関数を削除しないのですか?クエリ文字列は自由であり、クエリの正規バージョンと集約対応バージョンを持つために特別な費用を支払う必要はありません。 –

+0

これが意味を成すために、全体の質問を提供してください。 –

+0

なぜあなたはそれを必要としない場合は、select句に集約を持っていますか? – marapet

答えて

4

を必要としないことがあり、

SELECT TOP 1 Id, Description 
FROM Record 
ORDER BY CREATED DESC 
+0

面白いことに、これは良い考えです。 TOP 1/ORDER BYをMAX関数と比較してパフォーマンスを考えてみてください。 –

+0

@ Ek0nomik - TOP(1)は少なくともMAXと同じくらい速いです。しかし、パフォーマンスについても心配しないでください.MAX(x)は、Top(1)とは異なり、同じレコードの相関関係の説明を与えません。 – RichardTheKiwi

0

質問を誤解していない限り、選択したくない列を削除することはできませんか?

SELECT Id, Description 
FROM Record 
ORDER BY Created DESC LIMIT 1 
+0

上記のクエリはサブクエリですので、MAX(Cre​​ated)を削除した場合は、結合する最も新しいレコードだけを取得していません。 –

+0

サブクエリにORDER BY col LIMIT 1を追加するだけです。 – Jon

1
select TOP 1 ID, Description from Record 
    group by ID, Description order by MAX(Created) DESC 

あなたが列をグループ化せずに、集計関数を使用することはできません。その後、

そして、あなた上記のようなあなただけの最新のレコード(MAX(作成者))の説明(1レコード)をしたい場合でも、集約関数

select TOP 1 ID, Description from Record order by Created DESC 
+0

グループを追加するために自分の投稿を編集している途中で私を捕まえました。 :) –

+0

ああhehehe、ごめんなさい:) –

+0

SQLでは、列をグループ化せずに集計関数を使用できます。しかし、サブクエリは同じ行を返さないので、Ek0nomikはそれを行うことはできません。 (あなたと議論しているわけではなく、もっと明示しています) –

-1
SELECT DISTINCT Id, Description 
FROM Record