SQL Server查询以获取最新项目

时间:2012-11-14 04:28:52

标签: sql sql-server rdbms

我在表格中有以下信息。假设我们有各种各样的水果,每个水果箱可以有三个质量水平之一(好,坏,平均)。

我想查询表格以获得水果的最新质量状态。

水果质量时间戳
Orange Good 11月10日上午11点20分 Apple Bad 11月10日上午11点10分 Banana Good 11月10日上午10点 苹果平均11月10日,上午8点 葡萄坏11月10日,上午7点 葡萄平均11月10日,上午6:45
Apple Good 11月10日上午6:20
Banana Good 11月10日,5日上午 橙色平均11月9日,11日上午 Orange Bad 11月9日上午10点20分 Apple Good Nov 9月8日上午8点21分 葡萄好11月9日,5日上午 芒果坏11月9日,凌晨4点


查询结果应为:
橙色好
Apple坏了 香蕉好
葡萄坏了 芒果坏了

我是一个新手并且正在努力解决这个问题。任何帮助,将不胜感激。谢谢!

2 个答案:

答案 0 :(得分:2)

您是否考虑过使用窗口聚合函数和QUALIFY子句?

SELECT Fruit
     , Grade
  FROM MyTable
 QUALIFY MAX(Timestamp) OVER (PARTITION BY Fruit) = Timestamp

你也应该能够这样做:

SELECT Fruit
     , Grade
  FROM MyTable T1
 INNER JOIN
      (SELECT Fruit
            , MAX(Timestamp) AS MaxTimeStamp
         FROM MyTable
        GROUP BY 1) DT1
    ON T1.Fruit = DT1.Fruit
   AND T1.TimeStamp = DT1.MaxTimeStamp;

答案 1 :(得分:2)

WITH fruitStatus
AS
(
    SELECT fruit, quality, [timestamp],
            ROW_NUMBER() OVER (Partition BY Fruit ORDER BY [TimeStamp] DESC) rn
    FROM    tableName
)
SELECT fruit, quality
FROM fruitStatus
WHERE rn = 1