【发布时间】:2008-11-25 18:50:56
【问题描述】:
我有几个表用于记录应用程序的用户活动。表格看起来像这样(内存中的伪代码,可能在语法上不正确):
create table activity (
sessionid uniqueidentifier not null,
created smalldatetime not null default getutcdate()
);
create table activity_details (
sessionid uniqueidentifier not null,
activity_description varchar(100) not null,
created smalldatetime not null default getutcdate()
);
我的目标是为报告目的填充一个汇总表,如下所示:
create table activity_summary (
sessionid uniqueidentifier not null,
first_activity_desc varchar(100) not null,
last_activity_desc varchar(100) not null
);
第一个和最后一个活动描述将按时间顺序确定。我最初的想法是像这样更新汇总表:
truncate table activity_summary;
insert into activity_summary (sessionid)
select sessionid from activity;
update table activity_summary set
first_activity_desc = (select top 1 activity_desc from activity_detail where sessionid = as.sessionid order by created asc),
last_activity_summary = (select top 1 activity_desc from activity_detail where sessionid = as.sessionid order by created desc)
from activity_summary as;
但是,这对我来说似乎非常冗长且不必要。我只是不确定如何缩小它。我的直觉是我可以在插入语句中以某种方式完成所有操作,但我很难过。有什么建议么?
【问题讨论】:
标签: sql sql-server sql-server-2005