我看到了一些类似的问题,我无法用它来完成我的查询:
我有很多小时预测数据,每小时都有新的预测,从现在到未来几天。我的目标是创建一个查询(在视图中使用),为我提供每天(日期和小时)最新预测的预测数据。
FDate =预测日期
FHour =预测小时
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-09-10,这是最后一天的预测,它不会给我2018-09-06等等。
我的查询结果:
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-05 08:56:16
这样做的方法是使用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),并按您想要的顺序排序。全靠你了。
https://stackoverflow.com/questions/52180918
复制相似问题