计算大量记录的记录的最小值和最大值

时间:2013-05-28 14:53:31

标签: tsql sybase sybase-ase

我的问题是获取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   

1 个答案:

答案 0 :(得分: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的最小/最大日期,然后在UPDATE中使用此表并加入:

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