2017-12-29 17 views
-4

GROUP BYコマンドでSQLクエリを実行しようとしていますが、動作させることができません。問題を解決するために集計関数を使用しようとしましたが、それを正しく実行する方法は私のSQLクエリです。それは、集計関数またはGROUP BY句に含まれていないためSQLエラーGROUP BYを使用してクエリを正しく実行する方法

SELECT TOP 100 cModel ,fdate, BoardSN 
FROM FovComp 
GROUP BY fdate ORDER BY CONVERT(datetime, fdate) DESC 

エラーが

列「FovComp.cModel」選択リストでは無効です下回っています。

私はすべての列にしたいが、それはグループである必要がありますfdate任意の提案は素晴らしいでしょう。

+5

、クイック検索は、あなたがそれをまず – HoneyBadger

+1

を解決できるようにする必要があり、エラーが非常に明確です、どのような結果/出力を生成したいのかをみんなに教えてください。誰でもあなたの問題を解決しようとすることができます。あなたの質問はまったく明確ではありません – maddy23285

+0

だから、 'fdate'の一意の値ごとに出力に1つの行があります。しかしながら、これらの値に対応するものは、任意の数の異なる「cModel」および「BoardSN」値であってもよい。 *私たち*、つまりSQL Serverは、その単一の出力行で表現されるものからどの値*を選ぶかを知ることを意味しますか? –

答えて

2

GROUP BYは、カウント、合計、または平均化に役立ちますが、そのいずれも行っていません。あなたはにする必要があります。それ以外の場合はGROUP BYは意味をなさないので許可されません。

使用例:あなたが探している場合、また

WITH CTE 
AS 
(
    SELECT cModel ,fdate, BoardSN,CONVERT(datetime, fdate) AS fdate, 
    ROW_NUMBER() OVER(PARTITION BY cModel 
         ORDER BY CONVERT(datetime, fdate) DESC) AS RN 
    FROM FovComp 
) 
SELECT TOP 100 cModel ,fdate, BoardSN 
FROM CTE 
WHERE RN = 1 
ORDER BY fdate DESC; 

SELECT fdate, COUNT(cModel) AS COUNT_cModel, COUNT(BoardSN) AS COUNT_BoardSN 
FROM FovComp 
GROUP BY fdate 
ORDER BY CONVERT(datetime, fdate) DESC 
+0

ご返信ありがとうございますが、cModelと 'select all'カラムをCOUNTしてfdateでグループ化したいのですが、 – Sarotobi

+0

質問を編集し、入力データの代表セットを追加してください(10-15行、約2-4の異なる'fdate'値)+そのデータセットの予想される出力。 –

2

あなたは、各モデルの最新のデータを探しているなら、あなたはこれを行うランキング機能を使用することができます各モデルごとにトップ100を使用することができますWHERE RN <= 100

私はCOUNT cModelにしてすべての列とgroを選択しますそれまでfdateによって、あなたがこれを行うことができます。

WITH CTE 
AS 
(
    SELECT 
     fdate, 
     COUNT(cModel) AS ModelsCount 
    FROM FovComp 
    GROUP BY fdate 
) 
SELECT f.*, c.ModelsCount 
FROM FovComp AS f 
INNER JOIN CTE AS c ON f.fdate = c.fdate ; 
0

を私はあなたがこれを必要だと思う:

SELECT DISTINCT TOP 100 cModel ,fdate, BoardSN FROM FovComp ORDER BY CONVERT(datetime, fdate) DESC 
関連する問題