Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 проблема с запросом  [new]
_guest_
Guest
помогите разобраться. Есть таблица:
a a1 a2 1
a a3 a4 2
a a3 a5 5
b b1 b2 1
b b2 b3 3
Как получить результат:
a a3 a5 5
b b2 b3 3
спасибо
29 апр 03, 17:48    [187616]     Ответить | Цитировать Сообщить модератору
 Re: проблема с запросом  [new]
Chelyaba
Guest
Ты опиши что конкретно нужно, под твои условия много разных запросов подходят, например так
SELECT col1, MAX(col2), MAX(col3), MAX(col4)

FROM t
GROUP BY col1

хотя я думаю это как раз не то что нужно :)
29 апр 03, 17:55    [187626]     Ответить | Цитировать Сообщить модератору
 Re: проблема с запросом  [new]
Crip
Member

Откуда:
Сообщений: 2490
Самое грустное в этом посте - отсутствие первичного ключа. По крайней мере не он прослеживается...
29 апр 03, 18:07    [187640]     Ответить | Цитировать Сообщить модератору
 Re: проблема с запросом  [new]
_guest_
Guest
необходимо выбрать все строки из таблицы, в которых значение в 4-м столбце наибольшее для каждого уникального значения в 1-м столбце (см. первый пост)
29 апр 03, 18:09    [187643]     Ответить | Цитировать Сообщить модератору
 Re: проблема с запросом  [new]
Chelyaba
Guest
Если col1+col4 уникально:
SELECT

t2.*
FROM (SELECT col1, MAX(col4) col4 FROM t GROUP BY col1) t1
JOIN t t2 ON t2.col1=t1.col1 AND t2.col4=t1.col4

если не уникально, то что уникально (делай по аналогии)
если вообще ключа нет - изврат все это, даже думать не охота (под конец дня) :)
29 апр 03, 18:21    [187657]     Ответить | Цитировать Сообщить модератору
 Re: проблема с запросом  [new]
_guest_
Guest
to Crip
припустим вместо первичного ключа есть индекс. Но как ключ может изменить ситуацию?
29 апр 03, 18:22    [187660]     Ответить | Цитировать Сообщить модератору
 Re: проблема с запросом  [new]
Glory
Member

Откуда:
Сообщений: 104760
Первичный ключ может очень серьёзно изменить ситуацию.
Сравните

create table #t (myid int identity, f1 varchar(10), f2 varchar(10), f3 varchar(10), f4 int)


insert #t select 'a','a1','a2',1
union all select 'a','a3','a4',2
union all select 'a','a3','a5',5
union all select 'b','b1','b2',1
union all select 'b','b2','b3',3
union all select 'b','b2','b3',3

SELECT t2.*
FROM (SELECT f1, MAX(f4) f4 FROM #t GROUP BY f1) t1
JOIN #t t2 ON t2.f1=t1.f1 AND t2.f4=t1.f4

SELECT *
from #t a
where a.myid = (select top 1 myid from #t b where a.f1 = b.f1 order by f4 desc)

drop table #t
29 апр 03, 21:27    [187798]     Ответить | Цитировать Сообщить модератору
 Re: проблема с запросом  [new]
Chelyaba
Guest
2 Glory
А Вы уверены?
У меня, правда, в подобной ситуации есть еще уникальный индекс на col1+col4
скорость работы
SELECT t2.*

FROM (SELECT f1, MAX(f4) f4 FROM #t GROUP BY f1) t1
JOIN #t t2 ON t2.f1=t1.f1 AND t2.f4=t1.f4

значительно выше чем в случае
SELECT *

from #t a
where a.myid = (select top 1 myid from #t b where a.f1 = b.f1 order by f4 desc)
30 апр 03, 09:06    [187918]     Ответить | Цитировать Сообщить модератору
 Re: проблема с запросом  [new]
Glory
Member

Откуда:
Сообщений: 104760
Я говорил не про скорость работы, а про влияние первичного ключа на результаты.
30 апр 03, 09:55    [187975]     Ответить | Цитировать Сообщить модератору
 Re: проблема с запросом  [new]
Chelyaba
Guest
Я говорил не про скорость работы, а про влияние первичного ключа на результаты.
Повторяю вопрос автора:
Но как ключ может изменить ситуацию?
Ну значит, в данном случае, наличие первичного ключа НИКАК не влияет на получение нужного результата (т.к. можно сделать и без него да еще и работать будет быстрее).
30 апр 03, 10:29    [188033]     Ответить | Цитировать Сообщить модератору
 Re: проблема с запросом  [new]
Glory
Member

Откуда:
Сообщений: 104760
2 Chelyaba
Вы запускали предложенный мной скрипт ? Неужели не увидели разницы в результатах ?
30 апр 03, 10:32    [188038]     Ответить | Цитировать Сообщить модератору
 Re: проблема с запросом  [new]
Chelyaba
Guest
цитиирую автора:
необходимо выбрать все строки из таблицы, в которых значение в 4-м столбце наибольшее для каждого уникального значения в 1-м столбце (см. первый пост)
помоему результат выполнения 1 select в Вашем скрипте как раз этому соответствует, а вот второй, к сожалению, выдает не полную выборку, да еще и работает медленнее.
По моему, если я правильно понял вопрос автора, 2 вариант select не подходит.
Ну и зачем в этом случае первичный ключ (кроме общих досужих рассуждений что "должен быть")?
30 апр 03, 10:46    [188074]     Ответить | Цитировать Сообщить модератору
 Re: проблема с запросом  [new]
Glory
Member

Откуда:
Сообщений: 104760
Из постов автора как раз не видно, какой результат ему нужен при повторяющихся данных. Так что пускай уже он сам решит какой вариант ему больше подходит.
30 апр 03, 10:53    [188087]     Ответить | Цитировать Сообщить модератору
 Re: проблема с запросом  [new]
_guest_
Guest
to Glory

Хорошо, когда значения в последнем столбце идут в порядке возрастания или убывания. Как быть в том случае, когда данные неупорядоченные. Условия задачи остаются прежними (см. пост)
30 апр 03, 11:02    [188107]     Ответить | Цитировать Сообщить модератору
 Re: проблема с запросом  [new]
Glory
Member

Откуда:
Сообщений: 104760
А причем здесь порядок следования значений в столбце ????
Физическое следование записей не имеет никакого отношения к решению этой задачи.
30 апр 03, 11:14    [188133]     Ответить | Цитировать Сообщить модератору
 Re: проблема с запросом  [new]
_guest_
Guest
to Glory

А причем здесь порядок следования значений в столбце ????
Физическое следование записей не имеет никакого отношения к решению этой задачи.


полностью согласен, нашел ошибку в своем коде.
А каким образом можна автоматизировать построение временной таблицы?
30 апр 03, 11:34    [188185]     Ответить | Цитировать Сообщить модератору
 Re: проблема с запросом  [new]
Glory
Member

Откуда:
Сообщений: 104760
А каким образом можна автоматизировать построение временной таблицы?

А расшифровать ??
30 апр 03, 11:38    [188192]     Ответить | Цитировать Сообщить модератору
 Re: проблема с запросом  [new]
_guest_
Guest
to Glory

данные, которые необходимо вставить во временную таблицу находяться в представлении (view)
30 апр 03, 12:13    [188264]     Ответить | Цитировать Сообщить модератору
 Re: проблема с запросом  [new]
Glory
Member

Откуда:
Сообщений: 104760
Ну так
create table #t(....)
insert #t (....) select ... from myview ....

или так
select ... into #t from myview ....
30 апр 03, 12:25    [188297]     Ответить | Цитировать Сообщить модератору
 Re: проблема с запросом  [new]
_guest_
Guest
to Glory

Благодарю Вас за помощь. Разобрался:-)
30 апр 03, 13:19    [188417]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить