Как выбрать LASTDATE () в TSQL при использовании INNER JOINed таблицы? - PullRequest
0 голосов
/ 27 января 2012

Итак, вот и все: у меня есть таблица, которая возвращает временные области для идентификатора пользователя.К сожалению, он возвращает дублированные временные интервалы для некоторых пользователей (то есть некоторые пользователи появляются более одного раза в результатах, потому что у них есть дублированные записи в запросе).

Я хочу выбрать только самый последний временной интервал от пользователярезультаты для каждого пользователя в наборе результатов.Я попытался создать запрос, который бы сортировал по (), но это не оказалось плодотворным.Я думаю, что нахожусь на правильном пути с этим, но, возможно, нет.

В любом случае, вот примерная сводка результата, который я пытаюсь выяснить:

User        Activity 1                Activity1 ID  Activity 2               Activity2 ID
User 1      01-01-2009 - 12-31-2010   100.00        03-02-2009 - 05-05-2009  500.01
User 1      01-06-2009 - 12-31-2010   100.01        03-02-2009 - 05-05-2009  500.01
User 2      06-01-2009 - 12-31-2010   200.00        06-06-2010 - 03-03-2011  501.01

Что яхотел бы вернуть только первую категорию «Пользователь 1» (или, точнее, кортеж с самым длинным временным интервалом).Я использую MS SQL Server (TSQL), и он не поддерживает временные структуры данных (пока), но должен в 2012 году.

Есть мысли от коллектива?

Ответы [ 2 ]

2 голосов
/ 27 января 2012

Я полагаю, вы хотите "разделить" ваш запрос. Это должно помочь:

Предложение OVER.

Функция ROW_NUMBER.

Несколько интересных примеров.

0 голосов
/ 27 января 2012

Если вы хотите упорядочить по временным промежуткам, попробуйте вычесть дату окончания из даты начала. Например:

declare @Start DateTime, @End DateTime
set @Start = '20100131'
set @End = '20100502'

select @Start, @End
select cast(@End - @Start as int)

это вернет число 92.
Я использую

select top 1 
... 
order by cast(@End - @Start as int) desc 

Должно работать нормально.
Как пишет Телариан, использование разбиения также будет полезно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...