基于其他列的列的Max(Value) - SQL

问题描述 投票:0回答:2

我见过一些类似的问题,我还没能用它完成我的查询:

我有大量的每小时预测数据,每小时都有新的预测,他们都预测从现在到未来几天。我的目标是创建一个查询(在视图中使用),从日常(日期和小时)的最新预测中获取预测数据。

日期=预测日期

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

我的目标再次只是返回第一行。

sql-server group-by max
2个回答
2
投票

执行此操作的方法是使用row_number函数,因为它可以让您根据需要进行排序。

例如,如果您想要给定日期的最后一行,您可以执行以下操作:

;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),并按您想要的顺序排序。听你的。


0
投票

按日期和小时获取最新记录,在两列上使用ORDER BY并按降序排序(DESC)。

只获取第一行,使用TOP(1)

SELECT TOP(1) *
FROM MyTable
ORDER BY RDate DESC, RHour DESC
© www.soinside.com 2019 - 2024. All rights reserved.