2013-05-28 91 views
0

我的问题是要获取ABC的最大和最小日期。我需要做大约20万条记录,这需要更多的时间。如何提高性能要计算海量记录的最大和最小记录

ROW_ID  DATE     C  value 
---------------------------------------------- 
1 2012-08-01 00:00:00.0 ABC  87 
2 2012-09-01 00:00:00.0 ABC  87 
3 2012-10-01 00:00:00.0 ABC  87 
4 2012-11-01 00:00:00.0 ABC  87 
5 2012-12-01 00:00:00.0 ABC  87 
6 2013-01-01 00:00:00.0 CBA  87 
7 2013-02-01 00:00:00.0 ABC  87 
8 2013-03-01 00:00:00.0 ABC  87 

回答

2

你应该能够做到这一点很容易使用的东西,如:

select c, 
    min(date) min_date, 
    max(date) max_date 
from yt 
where c='ABC' 
group by c; 

SQL Fiddle with Demo

编辑,因为您试图使用此数据更新Sybase中的其他表,因此您有几个选项。 Sybase不容许在UPDATE语句中派生表,所以我会建议使用临时表来获得关于C的最小/最大日期,然后在您的更新使用此表的连接:

select c, 
    min(date) min_date, 
    max(date) max_date 
into #temp2 
from yt 
where c='ABC' 
group by c; 

update t 
set t.min_date = t1.min_date, 
    t.max_date = t1.max_date 
from temp t 
inner join #temp2 t1 
    on t.c = t1.c; 

SQL Fiddle with Demo

+0

感谢bluefeet。但问题是我必须在更新查询中使用它。更新查询不支持group by子句。 – antosnowin

+0

@antosnowin你在更新什么?请编辑您的OP与您的要求的确切细节 – Taryn

+0

我将基于'C'值更新最小值和最大值到另一个表..我需要在更新查询相同的逻辑。 – antosnowin