我看到了一些类似的问题,但我无法使用它来完成查询:
我有很多每小时的预报数据,并且每小时都会有新的预报,并且它们都从现在开始到未来几天进行预报。我的目标是创建一个查询(用于视图中),该查询为我提供每天(日期和小时)的最新预测的预测数据。
FDate =预测日期
小时=预测小时
RDate =做出日期预测
RHour =做出小时预测
我的桌子:
FDate FHour Value RDate RHour
2018-09-02 10 99 2018-09-02 9
2018-09-02 10 82 2018-09-02 8
2018-09-02 10 86 2018-09-01 20
在此示例中,我只想要第一行,因为这是最新的预测。
我想出了一个查询,该查询为我提供了从进行预测的最新日期开始的预测数据,而不是最近的小时。
SELECT t.FDate, t.FHour, t.Value, t.RDate, t.RHour
FROM MyTable t
INNER JOIN (
SELECT FDate, MAX(RDate) As MaxDate
FROM Mytable
GROUP BY FDate) tm t.FDate = tm.FDate AND t.RDate = tm.MaxDate
我试图在查询中包括MAX(RHour),但是它只给我比今天更早的日期和预报中的最新日期,而不是两者之间的一次。示例:从昨天开始,然后是2018年9月10日,即预测的最后一天,它不会给我2018年9月6日,依此类推。
我的查询结果:
FDate FHour Value RDate RHour
2018-09-02 10 99 2018-09-02 9
2018-09-02 10 82 2018-09-02 8
我的目标还是只返回第一行。
答案 0 :(得分:2)
执行此操作的方法是使用row_number函数,因为它可以让您根据需要进行排序。
例如,如果您想要给定FDate的最后一行,则可以执行以下操作:
;with t as (
select *, row_number() over (partition by FDate, fHour
order by RDate desc, RHour desc) r
from myTable
)
select * from t where r=1
您会看到,可以根据您的需要对分区进行定制(在此示例中,我猜测是FDate和FHour),并可以根据您的需要进行排序。一切由您决定。
答案 1 :(得分:0)
按日期和小时获取最新记录,在两列中使用ORDER BY
并对降序(DESC
)进行排序。
仅获取第一行,使用TOP(1)
。
SELECT TOP(1) * FROM MyTable ORDER BY RDate DESC, RHour DESC