我在表格中有以下信息。假设我们有各种各样的水果,每个水果箱可以有三个质量水平之一(好,坏,平均)。
我想查询表格以获得水果的最新质量状态。
水果质量时间戳
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坏了
香蕉好
葡萄坏了
芒果坏了
我是一个新手并且正在努力解决这个问题。任何帮助,将不胜感激。谢谢!
答案 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