0

だから基本的に私はこのテーブルを手に入れました

OrderID|       ChangeDate      | 
-------|-----------------------|
Order1 |2013-03-17 14:40:47.000|
Order1 |2013-03-20 16:09:09.000|
Order2 |2013-03-12 12:34:09.000|
Order3 |2013-03-20 18:30:12.000|
Order2 |2013-03-20 12:39:49.000|

私が必要としているのは、各 OrderID の上位 1 つだけです (現在、各注文で約 28000 の結果 [テーブル全体] が 100 回程度得られています) 上位のもの (最終変更日) のみが必要です私が持っている現在のクエリは次のようになります。

Select
     a.AuftragID
    ,a.Kunde
    ,max(ChangeDate)
From Orders O innerJoin
     factTable F on O.OrderID = F.OrderID
Group by a.AuftragID
        ,a.Kunde

いつものように注文ごとに上位の結果 (最新の changeDate の結果) のみを取得するにはどうすればよいでしょうか。

4

2 に答える 2

1

使用ROW_NUMBER:

WITH cte 
     AS (SELECT F.auftragid, 
                F.kunde, 
                changedate, 
                rn = Row_number() 
                     OVER( 
                       partition BY O.orderid 
                       ORDER BY changedate DESC) 
         FROM   orders O 
                INNER JOIN facttable F 
                        ON O.orderid = F.orderid) 
SELECT auftragid, 
       kunde, 
       changedate 
FROM   cte 
WHERE  rn = 1 

a(サンプルクエリのエイリアスはタイプであり、実際にはそうであると想定していることに注意してくださいf

TSQL ランキング関数

于 2013-03-21T09:44:44.090 に答える