我需要从语句表中获取每个用户帐户的maxdate并插入到临时表中。语句表具有超过4000万条记录。我尝试了以下查询,这花费了超过4分钟的时间。有没有更好的方法可以做到这一点?
select useraccount, max(date) into #temptable from statement
group by useraccount
分组可能很昂贵。 4分钟对于处理和创建大型表似乎并不那么糟糕。但是,如果您在(useraccount, date)
上有索引,则可以尝试:
select useraccount, date
into #temptable
from statement s
where date = (select max(s2.date) from statement s2 where s2.useraccount = s.useraccount);
也许是在插入用户时根据date(desc)对表中的用户进行排序,然后从表中选择日期并进行迭代。将第一个日期存储为一个值,如果下降的日期值与该第一个值不匹配,则退出。那就是我会做的,但不确定。如果您以对日期进行排序的方式设置了表格,则会使其他内容混乱。