首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于其他列的列的最大值(值)- SQL

基于其他列的列的最大值(值)- SQL
EN

Stack Overflow用户
提问于 2018-09-05 08:47:56
回答 1查看 75关注 0票数 0

我看到了一些类似的问题,我无法用它来完成我的查询:

我有很多小时预测数据,每小时都有新的预测,从现在到未来几天。我的目标是创建一个查询(在视图中使用),为我提供每天(日期和小时)最新预测的预测数据。

FDate =预测日期

FHour =预测小时

RDate =作出日期预测

RHour =作出了小时预报

我的桌子:

代码语言:javascript
复制
 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

在这个例子中,我只需要第一行,因为这是最新的预测。

我想出了一个查询,它给我预测的数据,从预测的最新日期,但不是最近的一个小时。

代码语言:javascript
复制
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等等。

我的查询结果:

代码语言:javascript
复制
FDate       FHour   Value   RDate       RHour
2018-09-02  10      99      2018-09-02  9
2018-09-02  10      82      2018-09-02  8

同样,我的目标是只返回第一行。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-05 08:56:16

这样做的方法是使用row_number函数,因为它将允许您根据您需要的任何东西进行订购。

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

代码语言:javascript
复制
;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),并按您想要的顺序排序。全靠你了。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52180918

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档