SQL - ближайшая запись в той же группе

70
7

Я пытаюсь выделить записи типа ya parent id. Если есть запись типа x, которая имеет одно и то же местоположение, или местоположение находится в пределах 5 меньше, чем запись типа y, и она находится в пределах одной группы, тогда мне нужно выделить этот идентификатор записей в качестве родительского идентификатора. Там может быть несколько записей х, которые соответствуют этому условию, поэтому мне нужно взять ближайший.

Чтобы быть ясным, я могу установить родительский элемент, если тип Y, а целью является тип x. Тип X не может иметь родительский элемент.

Надеемся, что эти таблицы до и после будут демонстрировать то, что я пытаюсь сделать.

До

enter image description here

После

enter image description here

Я собирался сделать это в коде, но, надеюсь, это возможно сделать в SQL. Я использую SQL-сервер, если это влияет на ответ?

Большое спасибо за любую помощь.

ура

Джим

спросил(а) 2014-01-20T02:08:00+04:00 6 лет, 9 месяцев назад
1
Решение
58

Я бы подошел к этому с коррелированным подзапросом:

update t
set ParentId = (select top 1 id
from table t2
where t2."type" = 'x' and
t2."group" = t."group"
t2.location between t.location - 5 and t.location
order by location
)
from table t
where "type" = 'y';

ответил(а) 2014-01-20T02:14:00+04:00 6 лет, 9 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема