我有几个表用于记录应用程序的用户活动。该表看起来是这样的(从内存伪代码,可能不是语法正确):SQL Server - 使用另一个表的第一行和最后一行更新一个表
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;
然而,这似乎令人难以置信的冗长和不必要的给我。我只是不确定如何缩小它。我的直觉是,我可以在插入语句中以某种方式做到这一点,但我很难过。有什么建议么?
感谢。我不知道为什么我没有想到这一点 - 我想我只是讨厌把选择语句换成像这样的列值。无论哪种情况,查询生成的潜在读取数量都很大 - 这正是我期望减少的。 – Chris 2008-11-25 19:03:21
我会为你做一个没有嵌套查询的。 – 2008-11-25 19:05:36