如何根据最大日期获取多行

时间:2016-03-25 07:55:11

标签: sql sql-server greatest-n-per-group

我在SQL服务器上有一个表SalePrices,数据如下:

SPID        ProductID       Price       Date
001         Pro01           10        2016-03-10
002         Pro01           20        2016-03-11
003         Pro02           10        2016-03-13
004         Pro02           20        2016-03-15

我想要的是创建一个视图,该视图仅显示我上次修改过的一个ProductID和Price。所以我想要的与下面的结果相同:

ProductID   Price   Date
Pro01       20      2016-03-11
Pro02       20      2016-03-15

5 个答案:

答案 0 :(得分:2)

这方面的方法很少,例如,使用ggplot

qplot(mpg, wt, data=mtcars) +
    facet_grid(am + cyl ~ vs, labeller = label_both)

<强> sql fiddle demo

答案 1 :(得分:1)

另一个带窗口函数的版本,这个版本带有FIRST_VALUE();

SELECT ProductID, price, date 
FROM products
WHERE spid IN (
  SELECT FIRST_VALUE(spid) OVER (PARTITION BY ProductID ORDER BY date DESC) spid 
  FROM products
)

An SQLfiddle to test with

请注意,带有ROW_NUMBER的Roman版本应该可以在SQL Server 2005及更高版本中运行,而这只适用于SQL Server 2012及更高版本。

答案 2 :(得分:0)

尝试这个:

    SELECT 
         ProductID
     ,   Price 
     , Date FROM tablename  AS A 
 JOIN (SELECT ProductID,MAX(Date) AS DATE FROM tablename 
    GROUP BY ProductID
) AS B ON A.Date=B.DATE AND A.ProductID=B.ProductID

答案 3 :(得分:0)

还有一种方法......

select productid,price,date
from 
table t1
where date=(select max(date) from table t2 where t1.productid=t2.productid)

答案 4 :(得分:0)

您的最后一条记录的SPID最高:

select 
  ProductId, Price, Date
from
  SalePrices sap
where
  sap.spid =(
  select
    max(sap2.spid)
  from
    SalePrices sap2
  where
    sap2.productId = sap.productId)

此查询将给出您想要的结果:

ProductID   Price   Date
Pro01       20      2016-03-11
Pro02       20      2016-03-15