1

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

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

水果质量时间戳
橙子 11 月 10 日好,上午 11:20
苹果坏 11 月 10 日,上午 11:10
香蕉好 11 月 10 日,上午 10 点
苹果平均 11 月 10 日,上午 8 点
葡萄 坏 11 月 10 日,上午 7 点
葡萄平均 11 月 10 日,6:45上午
Apple 好 11 月 10 日,早上 6:20
香蕉好 11 月 10 日,早上 5 点
Orange 平均 11 月 9 日,上午 11 点
Orange 坏 11 月 9 日,上午 10:20
Apple 好 11 月 9 日,早上 8:20
葡萄好 11 月 9 日,早上 5 点
芒果糟糕 11 月 9 日凌晨 4 点


查询结果应为:
Orange Good
Apple Bad
Banana Good
Grapes Bad
Mango Bad

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

4

2 回答 2

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;
于 2012-11-14T04:43:25.933 回答
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
于 2012-11-14T04:45:53.660 回答