У меня есть пара таблиц, которые используются для регистрации активности пользователя для приложения. Таблицы выглядит примерно так (псевдо-код из памяти, не может быть синтаксически правильно):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;
Однако это кажется невероятно многословным и ненужным мне. Я просто не знаю, как уменьшить его. Моя внутренность - это то, что я могу сделать это как-то все в инструкции insert, но я в тупике. Какие-либо предложения?
Спасибо. Я не знаю, почему я об этом не думал. Думаю, я просто ненавижу заявления на выборку в качестве значений столбцов.В любом случае количество потенциальных чтений, генерируемых запросом, велико: это то, что я хочу уменьшить. – Chris 2008-11-25 19:03:21
Я сделаю один без вложенных запросов для вас. – 2008-11-25 19:05:36