2011-07-06 22 views
3

で、2つの異なるカラムを持つことで、私はグループSQL Serverの

ID Stat Date 
1 1  2009-06-01 
2 1  2009-06-20 
3 1  2009-06-10 
4 2  2009-06-10 

O/P以下のようなデータは次のようにする必要が..

ID  Stat CDate 
2  1  2009-06-20 
4  2  2009-06-10 

私は、クエリ以下にしようと、失敗したしています、提案してください。

Select Distinct stat,MAX(Cdate) dt,id From testtable 
Group By stat,id 

が溶液..

選択f1.id、f1.statガット、testtableas F1からf1.cdate は(STATによってTESTTABLE群からDTとしてSTATを選択し、MAX(CDATE))を参加などF2 オンf2.stat = F1.statおよびf2.dt = f1.cdate

答えて

4
SELECT t1.id, t1.stat, t1.date 
FROM testtable t1 
JOIN (SELECT stat, MAX(date) date FROM testtable GROUP BY stat) t2 ON t1.stat = t2.stat AND t1.date = t2.date 
GROUP BY stat 
+0

ほとんどの場合、外側のselectのカラム名があいまいなので、テーブルとサブクエリのエイリアスを設定し、カラムの曖昧さを解消する必要があります。 – Ray

+0

@あなたが正しいですよ。それを私が直した。ありがとう! – niktrs

1

ここにIDを追加することはできません。 idのグループ化は結果として望ましい結果にはなりません。 idはその性質上、デフォルトでは区別されます。 idをグループ化するとすべてのデータが返されます。

+0

はい@レイ、私はそれを逃しました。ありがとう。 –

2

私は最大の日付に属していますか?

select t1.id, t1.stat, t1.cdate 
from testtable t1, 
    (select stat, max(cdate) max_date from testtable 
    group by stat) t2 
where t1.stat = t2.stat and t1.cdate = t2.max_date 
1
 

;with CTE AS 
(
    Select stat,MAX(Cdate)Over(Partition by stat) as dt,id 
    From testtable 
) 
Select ID,stat,dt 
From CTE 
Inner JOIn testtable On testtable.id=CTE.ID and testtable.date=CTE.dt 
Group By stat 

1

でも、私はnicktrsによるソリューションが好きでした。 SQL Server 2005以降を使用している場合は、これが有効です。内部クエリの

select k.id, k.stat, k.cdate from(
    select id, stat, cdate, row_num=rownumber() 
    over (partition by stat order by cdate desc) as k from testtab) 
where k.row_num=1; 

出力は次のようになります:フルクエリの後

ID Stat Date   Row_num 
2 1  2009-06-20 1 
3 1  2009-06-10 2 
1 1  2009-06-01 3 
4 2  2009-06-10 1 

出力が実行されます。

ID Stat Date 
2 1  2009-06-20 
4 2  2009-06-10 

は、この情報がお役に立てば幸いです。アジュー。

関連する問題