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 的前一个,(现在我得到大约 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

我该怎么做才能像往常一样只获得每个订单的最佳结果(最新更改日期结果),非常感谢您的帮助!

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 回答
0

将返回限制为一个:

Select
     a.AuftragID
    ,a.Kunde
    ,max(ChangeDate)
From Aufträge a, factTable F
where a.AuftragID = F.OrderID
Group by a.AuftragID
     ,a.Kunde
order by a.AuftragID DESC
limit 1
于 2013-03-21T16:12:45.820 回答