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

时间:2014-12-17 16:46:46

标签: 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

我正在尝试查找有助于将上面的已加星标(“*”)记录识别为“记录”的查询。 rails finder或raw sql语句都可以正常工作。到目前为止我得到的最好的是一个查询,它会告诉我一个给定的值是否是一个记录,但是它不能很好地扩展。

3 个答案:

答案 0 :(得分:0)

只是一个小组将工作正常。试试这个

SELECT MAX(Temperature), Date
FROM dbo.Temperatures
GROUP BY Date

答案 1 :(得分:0)

您可以使用not exists选择不存在较高值和较早日期的另一行的行

select date, value
from mytable t1
where not exists (
    select 1 from mytable t2
    where t2.value >= t1.value
    and t2.date < t1.date
)

答案 2 :(得分:0)

在Standard-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