Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Update max из одинаковых кроме id значений / 9 сообщений из 9, страница 1 из 1
18.04.2019, 21:32
    #39803627
Bulgat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Update max из одинаковых кроме id значений
Добрый вечер.
Обычно хватает только описать проблему и решение само находится, но здесь я что то явно туплю

Мне нужно обнулить первое или второе значение из двух одинаковых пришедших, то есть грубо говоря
update set = 0 where id = (выбранное одно значение where (число одинаковых значений >1) )

Таблица1

ID Место Нулевость
346905 107797 1
346907 107797 1

Таблица2

ID Ключ Место Расположение
1694613 zs0001 107797 1
1694612 zs0001 107797 1

Собственно написал такое

UPDATE таблица1 SET
таблица1.Нулевость = 0
FROM таблица2
INNER JOIN таблица1
ON таблица2.Место = таблица1.Место
AND таблица1.Нулевость = 1
where таблица1.ID in
(select max(таблица1.Место)
FROM таблица2
INNER JOIN таблица1
ON таблица2.Место = таблица1.Место
AND таблица1.Нулевость = 1
WHERE
таблица2.Ключ = @Ключ
AND
(SELECT COUNT(*)
FROM таблица2
INNER JOIN таблица1
ON таблица2.Место = таблица1.Место AND
таблица2.Ключ = @Ключ AND таблица2.Расположение = 1
) > 1
group by таблица1.Место)

Похоже я что то неправильно воспринимаю, как работает max, он разве не должен дать одну строку максимальную по группируемому?
...
Рейтинг: 0 / 0
18.04.2019, 22:46
    #39803648
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Update max из одинаковых кроме id значений
BulgatПохоже я что то неправильно воспринимаю, как работает max, он разве не должен дать одну строку максимальную по группируемому?Функция max возвращает значение, а не строку.
select max(таблица1.Место) возвращает из нескольких чисел Место то, которое самое большое.
То есть 107797.
А потом вы обновляете тот ID, который равен этому числу Место
То есть абсурдная операция получается.

Помочь написать запрос не могу, мне непонятна связка таблиц таблица1 и таблица2
Какая то страшная связка по неуникальным (в обоих таблицах) полям, смотреть больно, пойду почитаю Дейта, что бы успокоиться.
...
Рейтинг: 0 / 0
18.04.2019, 22:47
    #39803650
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Update max из одинаковых кроме id значений
alexeyvgПомочь написать запрос не могу, мне непонятна связка таблиц таблица1 и таблица2
Какая то страшная связка по неуникальным (в обоих таблицах) полям, смотреть больно, пойду почитаю Дейта, что бы успокоиться.Кстати, у вас и пост в форум задвоился.
Думаю, это как то связано.
...
Рейтинг: 0 / 0
19.04.2019, 09:22
    #39803739
dklim.kzn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Update max из одинаковых кроме id значений
для таких вещей есть два подхода
подзапрос с count, и по нему уже фильтровать id, где >1
либо оконные функции, модные и пачечно шустрые

прокатывает вот такое, например

select id,a,b,c,d
,count(*) over (partition by field/10)
from table
--where (count(*) over (partition by field/10))>1

но то, что закомменчено - не прокатывает, к сожалению, может допилят
тогда можно будет одним селектом/апдейтом обходиться
а сейчас это будет подзапрос, да ещё с distinct
поэтому в данном случае проще фильтровать традиционным подзапросом
select id,count(*)
from table
group by id

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

update t
set c=0
from table t,
(
select id
,b/(avg(a) over (partition by field/10)) r
,b/(avg(a) over (partition by field)) rr
from table
) f
where t.id=f.id
and f.r>f.rr
...
Рейтинг: 0 / 0
19.04.2019, 10:51
    #39803797
Руслан Дамирович
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Update max из одинаковых кроме id значений
Bulgat...
Давай для начала в данных разберемся
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
CREATE TABLE #table1 ( [id] INT, [место] INT, [нулевость] TINYINT )
INSERT INTO #tables1
VALUES
( 346905, 107797, 1 ),
( 346907, 107797, 1 )
;
CREATE TABLE #table2 ( [id] INT, [ключ] VARCHAR(10), [место] INT, [расположение] INT )
INSERT INTO #tables2
VALUES
( 1694613, 'zs0001', 107797, 1 ),
( 1694612, 'zs0001', 107797, 1 )
;


У тебя при соединении этих таблиц по полю [место] на выходе будет 4 строки.
...
Рейтинг: 0 / 0
19.04.2019, 13:44
    #39803933
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Update max из одинаковых кроме id значений
Bulgat,

Вам нужно просветление по части реляционной теории баз данных. Иначе будет непонимание, почему "я думаю так, а оно вот этак".
...
Рейтинг: 0 / 0
19.04.2019, 15:19
    #39803996
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Update max из одинаковых кроме id значений
Руслан ДамировичУ тебя при соединении этих таблиц по полю [место] на выходе будет 4 строки.Ничего вы не понимаете, он же соединяет [место] и [id]! И никаких дубликатов!
...
Рейтинг: 0 / 0
19.04.2019, 15:57
    #39804031
Руслан Дамирович
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Update max из одинаковых кроме id значений
alexeyvgРуслан ДамировичУ тебя при соединении этих таблиц по полю [место] на выходе будет 4 строки.Ничего вы не понимаете, он же соединяет [место] и [id]! И никаких дубликатов!
Н-да, невнимательно смотрел...
Но предположим, что ТС ошибся при написании скрипта.
...
Рейтинг: 0 / 0
19.04.2019, 16:14
    #39804039
Bulgat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Update max из одинаковых кроме id значений
Да я ошибся, поменял
where таблица1.ID in
(select max(таблица1.Место)

where таблица1.ID in
(select max(таблица1.ID)

И теперь как мне надо работает

Всем спасибо, так бы не увидел ошибку
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Update max из одинаковых кроме id значений / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]