Sql 高效地找到“创纪录的”值

Sql 高效地找到“创纪录的”值,sql,ruby-on-rails,algorithm,ruby-on-rails-4,query-optimization,Sql,Ruby On Rails,Algorithm,Ruby On Rails 4,Query Optimization,我试图找出一种有效的方法,从一组数据中识别出一组创纪录的高值。这比仅仅找到最大值要复杂得多,因为我想找到所有在记录时是最大值/记录高点的值。因此,为了尽可能地简化问题,设想一个模型/数据库表,如: Temperatures(date, value) 价值观如下: *1/1/2001: 79 *1/2/2001: 81 1/3/2001: 81 1/4/2001: 80 *1/5/2001: 82 1/6/2001: 81 *1/7/2001: 90 我正试图找到一个查询,帮助将上面的星号*记

我试图找出一种有效的方法,从一组数据中识别出一组创纪录的高值。这比仅仅找到最大值要复杂得多,因为我想找到所有在记录时是最大值/记录高点的值。因此,为了尽可能地简化问题,设想一个模型/数据库表,如:

Temperatures(date, value)
价值观如下:

*1/1/2001: 79
*1/2/2001: 81
1/3/2001: 81
1/4/2001: 80
*1/5/2001: 82
1/6/2001: 81
*1/7/2001: 90

我正试图找到一个查询,帮助将上面的星号*记录识别为记录。rails查找器或原始sql语句都可以正常工作。到目前为止,我得到的最好的结果是一个查询,它会告诉我给定的值是否是一个记录,但这不能很好地扩展

只需要一组人就行了。试试这个

SELECT MAX(Temperature), Date
FROM dbo.Temperatures
GROUP BY Date
您可以使用“不存在”来选择不存在值更高且日期更早的另一行的行

select date, value
from mytable t1
where not exists (
    select 1 from mytable t2
    where t2.value >= t1.value
    and t2.date < t1.date
)
在标准SQL中:

with temp (d, t, r) as                             
(select d, t, row_number() over (order by d)       
 from t),                                    
     data (d, t, r) as                             
(select d, t, r                                    
 from   temp                                       
 where  r = 1                                      
 union  all                                        
 select case when t.t > d.t then t.d else d.d end, 
        case when t.t > d.t then t.t else d.t end, 
        t.r                                        
 from   temp t                                     
 inner  join data d on d.r+1 = t.r)                
select min(d), min(t)                              
from   data                                        
group  by d, t    

我不认为它可以很容易地转换为SQL,但根据日期排序和迭代,同时保持最大值应该可以做到这一点。如果您的数据太大,可能不可行,那么您的数据规模是多少?您需要多长时间执行一次此查询?按[Date]从温度组中选择[Date],MAX[Value]如何?我正在对你的数据进行假设,这就是为什么这是一个评论,而不是一个答案