0

我的问题是获取 ABC 的最大和最小日期。我必须为大约 200 000 条记录执行此操作,这需要更多时间。如何提高性能

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   
4

1 回答 1

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 中使用此表和 JOIN:

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

于 2013-05-28T15:16:19.037 回答