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

Tsql 为大量记录计算记录的最小值和最大值,tsql,sybase,sap-ase,Tsql,Sybase,Sap 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:

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

您应该能够通过以下方式轻松完成此操作:

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

编辑,因为您试图使用此数据更新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;

请参见

谢谢蓝脚。但问题是我必须在更新查询中使用它。更新查询不支持group by子句。@您在更新什么?请用您要求的详细信息编辑OP。我将根据“C”值将最小值和最大值更新到另一个表中。我在更新查询中需要相同的逻辑。@antosnowin您能用这些详细信息编辑您的问题吗?下面的查询需要花费很多时间,我需要以优化的方式使用相同的逻辑。从#TEMP TMP中更新#TEMP SET MIN#u DATE=(从XYZ中选择MIN(日期),其中TMP.C=C和TMP.Value=Value),从XYZ中选择MAX#u DATE=(从XYZ中选择MAX(日期),其中TMP.C=C和TMP.Value=Value)