Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> запрос mssql сортировка 
:(
    Опции темы
reborn
Дата 2.8.2010, 13:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 20.5.2010
Где: Russia, Moscow

Репутация: нет
Всего: -4



Добрый день!

Прошу подсказать с созданием запроса.

Какая у меня цель и данные?

У меня есть таблица, где есть id, id_car и др. параметры.

Проблема в том, что id_car может несколько раз может совпадать ( конечно же id - primary key && auto_increment ), потому в данной таблице каждый раз добавляются новые данные, где находится авто ( широта, долгота ), и нужно хранить старые данные ( где находилось авто ).

Поэтому id_car может повторятся несколько раз.

Сам вопрос: как в такой таблице я могу выбрать все записи, но отсортировав так результат запроса, чтобы id_car не повторался ( а к примеру мы брали бы самый последний занесенный id_car в таблицу ( по id или time ) )?

Заранее спасибо
PM MAIL ICQ Skype   Вверх
EagleOne
Дата 3.8.2010, 08:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 20.11.2009

Репутация: нет
Всего: 1



Цитата

как в такой таблице я могу выбрать все записи, но отсортировав так результат запроса, чтобы id_car не повторался ( а к примеру мы брали бы самый последний занесенный id_car в таблицу ( по id или time ) )?


Ну например так:

Код

select
     sel_t.id
     , sel_t.id_car
     , ...
from
    t sel_t
where
    sel_t.id in (select max(filt_t.id) from t filt_t where filt_t.car_id = sel_t.car_id)  


t - это собсно ваша таблица где все храниться, sel_t и filt_t это просто её псевдонимы для выборки и фильтрации соответственно...

Это сообщение отредактировал(а) EagleOne - 3.8.2010, 08:16
PM MAIL   Вверх
Любитель
Дата 3.8.2010, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 1
Всего: 92



Если речь про MS SQL, наиболее правильно так:
Код

with rt as
(
  select id, id_car
     ,row_number() over (partition by id_car order by id desc) r
)
select id, id_car
from rt
where rt.r = 1



--------------------
PM MAIL ICQ Skype   Вверх
EagleOne
Дата 3.8.2010, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 20.11.2009

Репутация: нет
Всего: 1



Цитата

наиболее правильно так


А вы уверены, что строить CTE с секционированием на лету  это хорошая идея?
PM MAIL   Вверх
Любитель
Дата 4.8.2010, 00:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 1
Всего: 92



1. CTE в случае отсутствия рекурсии - это обычный подзапрос. Что вам не нравится?
2. Что такое "секционирование"? Если имеется ввиду ранжирование с partition-ом - то.. Ну - смотрите план вашего запроса. Очевидно, что ваш in приведёт на самом деле к джойну с подзапросом для выборки максимальных id_car (и групировкой по id_car). При наличии соответствующего индекса - вариант с джойном работает уже несколько дольше (на 10000 записей). Причём - тут, что важно, что в данном случае в индекс входят все поля (что на практике не так).

Вообще - чем очевидней можно выразить результат, тем лучше. При более завороченной структуре, внутри какого-нибудь обширного запроса оптимизатор может не развернуть in в джойн..

Добавлено через 30 секунд
PS. Ток я там from в подзапросе оказывается пропустил.


--------------------
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Базы данных под .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0539 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.