Sql server 基于其他列的最大列数(值)-SQL

Sql server 基于其他列的最大列数(值)-SQL,sql-server,group-by,max,Sql Server,Group By,Max,我看到一些类似的问题,但我无法使用它来完成我的查询: FDate FHour Value RDate RHour 2018-09-02 10 99 2018-09-02 9 2018-09-02 10 82 2018-09-02 8 我有很多每小时的预测数据,每小时都有新的预测,他们都预测从现在到未来几天。我的目标是创建一个查询(在视图中使用),该查询为我提供来自每天最新预测(日期和小时)的预测数据 FDate=预

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

FDate       FHour   Value   RDate       RHour
2018-09-02  10      99      2018-09-02  9
2018-09-02  10      82      2018-09-02  8
我有很多每小时的预测数据,每小时都有新的预测,他们都预测从现在到未来几天。我的目标是创建一个查询(在视图中使用),该查询为我提供来自每天最新预测(日期和小时)的预测数据

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

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

实现这一点的方法是使用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)对分区进行定制,并根据您的需要进行排序。这一切取决于您。

实现这一点的方法是使用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)对分区进行定制,并根据您的需要进行排序。一切由您决定。

按日期和时间获取最新记录,在两列上使用
排序,并按降序对两列进行排序(
DESC

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

选择顶部(1)* 从MyTable 订单由RDate DESC、RHour DESC订购
按日期和小时获取最新记录,在两列上使用
orderby
,并按降序对两列进行排序(
DESC

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

选择顶部(1)* 从MyTable 订单由RDate DESC、RHour DESC订购
您如何确定第一行是最新的?您还可以包括查询结果。第一行是最新的,因为它是给定FDate和FHour的最新RDate和RHour。。。我编辑了查询结果。您想要最新的预测数据还是每天最新的预测数据?是的,我可能没有正确解释,但我需要创建一个包含每天所有持续预测数据的视图。您如何确定第一行是最新的?您还可以包括查询结果。第一行是最新的,因为它是给定FDate和FHour的最新RDate和RHour。。。我编辑了查询结果。您想要最新的预测数据还是每天最新的预测数据?是的,我可能没有正确解释,但我需要创建一个包含每天所有最新预测数据的视图谢谢是否可以使其仅适用于昨天和以前的数据,并获取今天的所有数据,而不仅仅是最新的预测?我不确定是否理解该限制,但您可以在CTE内、最终选择中添加任何类型的where子句,或者,如果您需要按某种奇怪的条件进行排序,则在0 else 1 end时按大小写包含
order by case,以提供您想要的任何覆盖顺序。它完全灵活。谢谢是否可以使其仅适用于昨天和以前的数据,并获取今天的所有数据,而不仅仅是最新的预测?我不确定是否理解该限制,但您可以在CTE内、最终选择中添加任何类型的where子句,或者,如果您需要按某种奇怪的条件进行排序,则在0 else 1 end时按大小写包含
order by case,以提供您想要的任何覆盖顺序。它是完全灵活的。