2012-02-08 7 views
0

以下のように私は、MSSQLのテーブルを持っている:私はそれぞれのproductIDでグループ化された最後の入札レコードを選択するためのSQLを作成したいグループの誤った構文を解決するにはどうすればよいですか?

enter image description here

結果は3レコード(13行15行17行)になります。エラーが発生しまし示され

select top 1 * 
from Bid 
order by bidDate desc 
group by productID 

Msg 156, Level 15, State 1, Line 1 
Incorrect syntax near the keyword 'group'. 

誰もが私を助けることができる

私の現在のSQLはこのようなものでしょうか?

+0

使用しているデータベース:

することができますあなたの問題を解決するには? mysql?ポストグル? mssql? – Bohemian

+0

SQL-Serverはどちらのバージョンですか? –

+0

sql server 2008 R2 – crchin

答えて

2

グループ内の正しい構文は、mysql内にない限り、GR内でSELECT *できないためですOUP BYクエリ。

SELECT 
    B.* 
FROM 
    (
    SELECT 
     MAX(bidDate) maxDate, 
     productID 
    FROM 
     Bid 
    GROUP BY 
     productID 
    ) Q INNER JOIN Bid B 
    ON Q.maxDate = B.bidDate 
    AND Q.productID = B.productID 
2

クエリに2つのエラーがあります。

  1. group byは、第一およびorder byあとがきです。

  2. あなたのクエリを解決するためにgroup by


の列(などcountsumavg、などのagregate機能なし)selectは、このようにそれを行うだけことができます。

select b.* 
from Bid b 
inner join (select max(bidDate) as maxDate, productID from Bid group by productID) aux 
    on aux.productID = b.productID and aux.maxDate = b.bidDate 
+0

ORDER BYを実行するために、結果にbidDateがありませんでした。 –

+0

@AndreaColleoniありがとう、私はそれを逃した!私は編集しました: –

+0

エラーが発生しました。列「Bid.bidDate」は、集計関数またはGROUP BY句に含まれていないため、ORDER BY句では無効です。 @@ – crchin

関連する問題