Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Помогите составить хитрый запрос  [new]
Airilo
Member

Откуда:
Сообщений: 37
Дано:

SELECT [Id]
,[UserId]
,[TaskId]
,[TimeStamp]
,[Latitude]
,[Longitude]
FROM [GPSCache]


Нужно сделать выборку что бы поле [UserId] было уникально, при этом из всех значений должно быть выбрано максимально по полю [TimeStamp].

Вот данные:

Id UserId TaskId TimeStamp Latitude Longitude
16304 1 220 834859136000000000 56311238 43888008
16305 1 223 734859236000000000 56320202 43925471
16306 1 220 634859336000000000 56322296 43944526
16320 2 201 534889436000000000 56216155 43932238
16321 2 208 434889436000000000 56228371 43943567
16322 2 202 334889446000000000 56242205 43962965

В результате запроса должно быть выбрано только:


Id UserId TaskId TimeStamp Latitude Longitude
16304 1 220 834859136000000000 56311238 43888008
16320 2 201 534889436000000000 56216155 43932238

Заранее благодарю!
3 сен 13, 14:57    [14789683]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить хитрый запрос  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
Airilo,

а поговорить? ©
3 сен 13, 15:00    [14789709]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить хитрый запрос  [new]
Airilo
Member

Откуда:
Сообщений: 37
Иными словами нужно найти максимальное значение не просто для колонки TimeStamp, а максимальное значение для каждого юзера.
3 сен 13, 15:09    [14789755]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить хитрый запрос  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
Airilo
Иными словами нужно найти максимальное значение не просто для колонки TimeStamp, а максимальное значение для каждого юзера.
Что Вы сами предприняли-то?
И какая версия сервера?
3 сен 13, 15:12    [14789778]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить хитрый запрос  [new]
Airilo
Member

Откуда:
Сообщений: 37
Забыл сказать что такой запрос не работает, и я не знаю почему...

SELECT  
       [Id]      
      ,[UserId]
      ,[TaskId]
      ,max([TimeStamp]) as [TimeStamp]
      ,[Latitude]
      ,[Longitude]
  FROM [MobileDB].[dbo].[GPSCache]
  Group By [UserId], [Id], [TaskId], [TimeStamp], [Latitude], [Longitude]
3 сен 13, 15:13    [14789779]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить хитрый запрос  [new]
Airilo
Member

Откуда:
Сообщений: 37
версия сервера 10.0.1600.22
3 сен 13, 15:14    [14789786]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить хитрый запрос  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
Например:
SELECT  TOP(1) WITH TIES
       [Id]      
      ,[UserId]
      ,[TaskId]
      ,[TimeStamp]
      ,[Latitude]
      ,[Longitude]
FROM [MobileDB].[dbo].[GPSCache]
ORDER BY ROW_NUMBER()OVER(PARTITION BY [UserId] ORDER BY [TimeStamp] DESC);
3 сен 13, 15:23    [14789839]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить хитрый запрос  [new]
Airilo
Member

Откуда:
Сообщений: 37
Офигеть, я бы мучился пару дней упорного копания что бы выдать такой запрос. Спасибо большое! Вопрос какую роль в запросе играет ROW_NUMBER() ? Без этого нельзя?
3 сен 13, 15:29    [14789876]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить хитрый запрос  [new]
Airilo
Member

Откуда:
Сообщений: 37
Загуглил... спасибо еще раз
3 сен 13, 15:39    [14789907]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить хитрый запрос  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
Airilo
Офигеть, я бы мучился пару дней упорного копания что бы выдать такой запрос. Спасибо большое! Вопрос какую роль в запросе играет ROW_NUMBER() ? Без этого нельзя?
Здесь, на этом форуме задача решалась много раз более чем десятью разными способами.
Осталось только воспользоваться поиском (наверху рядом со словом "Выйти")
3 сен 13, 15:45    [14789928]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить