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

Откуда:
Сообщений: 180
Есть список nameid типа char, причем в списки элементы повторяются, необходимо написать запрос, чтобы остались только последние nameid
8 дек 05, 10:15    [2151973]     Ответить | Цитировать Сообщить модератору
 Re: помогите с запросом  [new]
Glory
Member

Откуда:
Сообщений: 104760
Kronix
Есть список nameid типа char, причем в списки элементы повторяются, необходимо написать запрос, чтобы остались только последние nameid

Если список только из одного столбца, "последний" по каким критериям ?
8 дек 05, 10:16    [2151981]     Ответить | Цитировать Сообщить модератору
 Re: помогите с запросом  [new]
Kronix
Member

Откуда:
Сообщений: 180
список не из одного столбца
8 дек 05, 10:18    [2151990]     Ответить | Цитировать Сообщить модератору
 Re: помогите с запросом  [new]
Glory
Member

Откуда:
Сообщений: 104760
Kronix
список не из одного столбца


"Есть список nameid типа char"
8 дек 05, 10:19    [2152001]     Ответить | Цитировать Сообщить модератору
 Re: помогите с запросом  [new]
Prolog
Member

Откуда: Москва
Сообщений: 2791
А как понять это это nameid последнее?
8 дек 05, 10:19    [2152002]     Ответить | Цитировать Сообщить модератору
 Re: помогите с запросом  [new]
Kronix
Member

Откуда:
Сообщений: 180
мда, неправильно выразился, не список, таблица, одна из колонок nameid, необходимо удалить все записи, кроме последних, у которых nameid одинаковые
8 дек 05, 10:23    [2152028]     Ответить | Цитировать Сообщить модератору
 Re: помогите с запросом  [new]
Glory
Member

Откуда:
Сообщений: 104760
Kronix
мда, неправильно выразился, не список, таблица, одна из колонок nameid, необходимо удалить все записи, кроме последних, у которых nameid одинаковые

Что есть "последняя" запись для одинаковых nameid ?
8 дек 05, 10:28    [2152064]     Ответить | Цитировать Сообщить модератору
 Re: помогите с запросом  [new]
Kronix
Member

Откуда:
Сообщений: 180
пример:
'a1',123
'a2',1414
'a2',1231
'a1',114
'a2',214
после обработки:
'a1',114
'a2',214
8 дек 05, 10:37    [2152130]     Ответить | Цитировать Сообщить модератору
 Re: помогите с запросом  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381

Kronix

пример:
'a1',123
'a2',1414
'a2',1231
'a1',114
'a2',214
после обработки:
'a1',114
'a2',214

а если так?
'a1',123
'a2',1414
'a2',1231
'a1',114
'a2',214
'a2',528


Posted via ActualForum NNTP Server 1.3

8 дек 05, 10:46    [2152193]     Ответить | Цитировать Сообщить модератору
 Re: помогите с запросом  [new]
Kronix
Member

Откуда:
Сообщений: 180
'a1',114
'a2',528
8 дек 05, 10:48    [2152203]     Ответить | Цитировать Сообщить модератору
 Re: помогите с запросом  [new]
Prolog
Member

Откуда: Москва
Сообщений: 2791
Для начала добавьте в таблицу поле RowID int identity или Inserted datetime default getdate()
8 дек 05, 10:52    [2152238]     Ответить | Цитировать Сообщить модератору
 Re: помогите с запросом  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381

2 Kronix
однажды, Вам уже пытались объяснить, что "просто" первых и последних записей не бывает. тогда Вам кто-то показал set rowcount и на
этом Вы успокоились. напрасно... "последнюю" запись можно найти, только если есть какой-то критерий, по которому она является
последней. например, если в таблице есть поле типа datetime, то можно найти "последнюю" запись по этому полю. то есть, запись с
максимальным значением этого поля.


Posted via ActualForum NNTP Server 1.3

8 дек 05, 10:56    [2152253]     Ответить | Цитировать Сообщить модератору
 Re: помогите с запросом  [new]
RENaissance
Member

Откуда: Муром->Москва
Сообщений: 10895

Пойдет?

declare @t table (colID varchar(2), colValue int)
insert @t values ('a1', 123)
insert @t values ('a2', 1414)
insert @t values ('a2', 1231)
insert @t values ('a1', 114)
insert @t values ('a2', 214)

select *
from @t t
where exists(select 1
from @t
where colID = t.colID
group by colID
having min(colValue) = t.colValue)


Posted via ActualForum NNTP Server 1.3

8 дек 05, 10:57    [2152267]     Ответить | Цитировать Сообщить модератору
 Re: помогите с запросом  [new]
vadim_march_забыл_пароль
Guest
Если у Вас на таблице нет ни одного ключа, никаких кластеред индексов,
но Вы хотите сохранить только порядок "как есть", т.е. физический,
в EM добавьте колонку ID int IDENTITY
Она отрисует возрастание ID, ориентируясь на неявный ключ.

А далее - группировка по max(ID)
8 дек 05, 11:07    [2152339]     Ответить | Цитировать Сообщить модератору
 Re: помогите с запросом  [new]
Kronix
Member

Откуда:
Сообщений: 180
2 Prolog: нужно без вских добавлений
2 daw: плохо пытались, а я плохо соображаю, кроме того последню запись можно найти, использовав order by..desk с top(limit)
2 RENaissance: вы немного не поняли закономерность, сортировка не по colvalue, см. 2 пример
Вообще, конечно, вариант есть, взять все сгрузить в массив1(order by ..desc) и сделать выборку типа:
цикл от 1 до последней записи в массиве1
Если элемент записи есть в массиве2, то удаляем его из массива1
иначе, записываем элемент записи в массив2 и удаляем его из массива1
следующий элемент
Но для 250000 записей это немного долговато будет, хотя если ничего никто не подскажет, то наверное придется сделать именно так
8 дек 05, 14:30    [2153548]     Ответить | Цитировать Сообщить модератору
 Re: помогите с запросом  [new]
Glory
Member

Откуда:
Сообщений: 104760
все сгрузить в массив1(order by ..desc)
Судя по всему критерий "последний" так и останется неизвестным.

Но для 250000 записей это немного долговато будет, хотя если ничего никто не подскажет, то наверное придется сделать именно так
Можно лишь посоветовать проектировать таблицы в соотвествии с теорией реляционных баз данных
8 дек 05, 14:38    [2153595]     Ответить | Цитировать Сообщить модератору
 Re: помогите с запросом  [new]
vadim_march_забыл_пароль
Guest
to Glory
скорее всего на таблице ничего нет, а под "порядком следования" понимается порядок, который возвращается при open table
8 дек 05, 14:44    [2153626]     Ответить | Цитировать Сообщить модератору
 Re: помогите с запросом  [new]
Prolog
Member

Откуда: Москва
Сообщений: 2791
Kronix
2 Prolog: нужно без вских добавлений
Пока не добавите - ничего не получится, кроме проблем. Ваше решение с массивом будет выдавать и может быть довольно-таки часто нужное вам решение. Но не всегда!!!
8 дек 05, 14:52    [2153667]     Ответить | Цитировать Сообщить модератору
 Re: помогите с запросом  [new]
vadim_march_забыл_пароль
Guest
Kronix
взять все сгрузить в массив1(order by ..desc)

Раз есть по чему ордер, то при всём богатстве выбора только один вариант

1. если [колонку_по_которой_деск] можно подвергнуть MIN(колонка_по_которой_деск),
т.е. тип дата, инт и т.д.
можно было бы сгруппировать, если бы была гарантия уникальности
А в общем случае как ни крутите нужна доп.колонка ID

2. если [колонка_по_которой_деск] типа стринг, то, опять же, нужна доп.колонка ID

В общем не отпирайтесь :-) ставьте колонку ...
8 дек 05, 15:13    [2153806]     Ответить | Цитировать Сообщить модератору
 Re: помогите с запросом  [new]
Kronix
Member

Откуда:
Сообщений: 180
хорошо, сделал ID int IDENTITY, что делать дальше?
9 дек 05, 08:07    [2156074]     Ответить | Цитировать Сообщить модератору
 Re: помогите с запросом  [new]
TMN
Member

Откуда:
Сообщений: 115
Типа этого:
select nameid, Value from Table where id in (
(select max(id) from Table
group by nameid))
9 дек 05, 08:27    [2156102]     Ответить | Цитировать Сообщить модератору
 Re: помогите с запросом  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
declare @t table(id int identity, named varchar(20), c int)

insert @t values('a1',123)
insert @t values('a2',1414)
insert @t values('a2',1231)
insert @t values('a1',114)
insert @t values('a2',214)

--или так
select t1.named,
	t1.c
	from @t t1 join
	(select max(id) as id
		from @t
		group by named) t2 on t1.id = t2.id
--или так
select named,
	(select top 1 c from @t where named = t.named order by id desc) as c
	from @t t
	group by named
9 дек 05, 08:30    [2156106]     Ответить | Цитировать Сообщить модератору
 Re: помогите с запросом  [new]
Kronix
Member

Откуда:
Сообщений: 180
спасибо
12 дек 05, 00:48    [2161580]     Ответить | Цитировать Сообщить модератору
 Re: помогите с запросом  [new]
Олег_Т
Member

Откуда:
Сообщений: 2
select nameid,max(rownum) from table
group by nameid;
12 дек 05, 14:21    [2163045]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить