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

Откуда:
Сообщений: 11
Доброе время суток, уважаемые форумчане!
Подскажите нубу решение такого вопроса.
Имеем такую таблицу
             ID                         NAME
6C3B11AE-A8C5-4D89-AECE-1DD6D9812E8D	101
8FCE12F6-7A3D-43DD-8950-93EEEF19AB3C	102
3758C5B0-E932-48D8-A7CE-300A801168FD	103
6EF220F4-4B26-40E9-8416-661ACB9DD218	104
A32929A5-BEA4-4CC7-B958-E65E58DFF498	105


Как, зная id записи получить её соседей, т.е. зная id 103 предшествующую запись и последующую(102 и 104)
Действо надо совершить на T-SQL MSSQL2008
10 окт 12, 12:39    [13295068]     Ответить | Цитировать Сообщить модератору
 Re: Поиск "соседей" по таблице  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5144
как "соседей" определяете?
10 окт 12, 12:44    [13295106]     Ответить | Цитировать Сообщить модератору
 Re: Поиск "соседей" по таблице  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
Max Belov,

...
FROM TAB t1    
LEFT JOIN TAB t2 ON t2.NAME = t1.NAME -1
LEFT JOIN TAB t3 ON t3.NAME = t1.NAME +1
10 окт 12, 12:44    [13295107]     Ответить | Цитировать Сообщить модератору
 Re: Поиск "соседей" по таблице  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
т.е. так

from TAB t1    
LEFT JOIN TAB t2 ON t1.NAME = t2.NAME -1
LEFT JOIN TAB t3 ON t1.NAME = t3.NAME +1
10 окт 12, 12:45    [13295118]     Ответить | Цитировать Сообщить модератору
 Re: Поиск "соседей" по таблице  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5144
trew,

а если наме не растёт монотонно и последовательно?
10 окт 12, 12:46    [13295125]     Ответить | Цитировать Сообщить модератору
 Re: Поиск "соседей" по таблице  [new]
iap
Member

Откуда: Москва
Сообщений: 47198
Может, просто пронумеровать ROW_NUMBERом и взять текущую ± 1?
10 окт 12, 12:47    [13295143]     Ответить | Цитировать Сообщить модератору
 Re: Поиск "соседей" по таблице  [new]
iap
Member

Откуда: Москва
Сообщений: 47198
Дедушка
trew,

а если наме не растёт монотонно и последовательно?
Так ведь именно по NAME определяются соседи, судя по тексту первого поста
10 окт 12, 12:48    [13295156]     Ответить | Цитировать Сообщить модератору
 Re: Поиск "соседей" по таблице  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5144
iap,

дак я и спросил "как "соседей" определяете?" ибо только автор может это знать.
10 окт 12, 12:50    [13295171]     Ответить | Цитировать Сообщить модератору
 Re: Поиск "соседей" по таблице  [new]
Jovanny
Member

Откуда:
Сообщений: 1196
DECLARE @Table table (id uniqueidentifier, name int);
DECLARE @i tinyint = 0

WHILE @i < 10
BEGIN
	INSERT @Table (id, NAME)
	VALUES (NEWID(), @i)

	SET @i += 1
END

SELECT * FROM @Table

DECLARE @Id uniqueidentifier
SELECT @Id = id FROM @Table WHERE name = 4

SELECT @Id

SELECT id, name FROM
	(SELECT TOP(1) id, name FROM @Table AS T1 
		WHERE name < (SELECT name FROM @Table WHERE id = @Id)
	ORDER BY name DESC) AS T
UNION ALL
SELECT id, name FROM
	(SELECT TOP(1) id, name FROM @Table AS T2 
		WHERE name > (SELECT name FROM @Table WHERE id = @Id)
	ORDER BY name ASC) AS T
10 окт 12, 12:53    [13295207]     Ответить | Цитировать Сообщить модератору
 Re: Поиск "соседей" по таблице  [new]
iap
Member

Откуда: Москва
Сообщений: 47198
Дедушка
iap,

дак я и спросил "как "соседей" определяете?" ибо только автор может это знать.
Max Belov
т.е. зная id 103 предшествующую запись и последующую(102 и 104)
10 окт 12, 13:28    [13295560]     Ответить | Цитировать Сообщить модератору
 Re: Поиск "соседей" по таблице  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5144
iap,

хорошо, хорошо я собственно не против...
только автор так и не ответил.
и существует вероятность, что эти самые 102 и 104 приведены для конкретного куска данных, а что за его границами неизвестно.
10 окт 12, 13:42    [13295698]     Ответить | Цитировать Сообщить модератору
 Re: Поиск "соседей" по таблице  [new]
Max Belov
Member

Откуда:
Сообщений: 11
Спасибо за отзывы
Соседей хочу определить зная id
10 окт 12, 15:07    [13296496]     Ответить | Цитировать Сообщить модератору
 Re: Поиск "соседей" по таблице  [new]
Max Belov
Member

Откуда:
Сообщений: 11
еще хотелось бы узнать имеет ли guid какой-нибудь "вес" или служит только для определения уникальности ключа?

PS для гуру которые не любят вопросы зеленых, отвечаю сразу, оракул гугла на этот вопрос мне не ответил.
10 окт 12, 15:12    [13296530]     Ответить | Цитировать Сообщить модератору
 Re: Поиск "соседей" по таблице  [new]
iap
Member

Откуда: Москва
Сообщений: 47198
Max Belov
Соседей хочу определить зная id
Тумана напускаете, да?
В такой неясной постановке Вам никто-никто не ответит!
10 окт 12, 15:21    [13296629]     Ответить | Цитировать Сообщить модератору
 Re: Поиск "соседей" по таблице  [new]
или фазе луны
Guest
Max Belov
еще хотелось бы узнать имеет ли guid какой-нибудь "вес" или служит только для определения уникальности

????????
автор
PS для гуру которые не любят вопросы зеленых, отвечаю сразу, оракул гугла на этот вопрос мне не ответил.
[/quote]
что не удивительно

что такое "вес", для чего этот "вес", в контексте чего, о чем речь вообще? почему вопрос о "весе" задан только по гуиду, а не по второму столбцу или, например, по имени таблицы, или дате, или фазе луны?
10 окт 12, 15:26    [13296693]     Ответить | Цитировать Сообщить модератору
 Re: Поиск "соседей" по таблице  [new]
Max Belov
Member

Откуда:
Сообщений: 11
Jovanny прекрасно меня понял(за что ему большое спасибо)

Под "весом" имел ввиду его значение (можно ли над ним совершать арифметические и логические действа) или он служит только для определения уникальности ключа?(вопрос возможно глупый, но интерес не всегда бывает разумным)
10 окт 12, 15:34    [13296797]     Ответить | Цитировать Сообщить модератору
 Re: Поиск "соседей" по таблице  [new]
от лукавого
Guest
Max Belov,

смыслов в гуиде как в типе данных нет никаких кроме хранения глобально уникального id.

как и с любым другим типом данных с ним можно просто тупо взять и что-нибудь сделать (сложить, вычесть и т.д.), но это всё от лукавого, от гуида не нужно хотеть ничего и никогда кроме уникальности.

даже sequential гуиды - это бред. костыль для хромых на всю голову систем.
наверняка из-за этой затей некоторые "колеблющиеся" решили что в гуиде все-таки есть "смысл" и переметнулись на темную сторону.

пересекался с ребятами, которые брали от гуида md5, кастовали обратно к гуиду и называли это "дочерний гуид".
это вывих мозга.
10 окт 12, 16:16    [13297235]     Ответить | Цитировать Сообщить модератору
 Re: Поиск "соседей" по таблице  [new]
Max Belov
Member

Откуда:
Сообщений: 11
Вопрос другой (не стал создавать отдельную тему для экономии)
Таблица эта же.
Как проверить соблюдение последовательности по столбцу Name?
Т. е. 101 идет следом за 102 и т. д. и вернуть одно значение true, либо false если последовательность не соблюдается.
Пробовал через case, но он возвращает значение по каждой строке, а хотелось бы получить одно значение.
11 окт 12, 20:30    [13304922]     Ответить | Цитировать Сообщить модератору
 Re: Поиск "соседей" по таблице  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
select 
   case 
     when t2.id is not null
         then 'true' 
     else 'false' 
  end
from table t1
  left outer join table t2 on t1.name = t2.name +1


якось так
11 окт 12, 21:10    [13305060]     Ответить | Цитировать Сообщить модератору
 Re: Поиск "соседей" по таблице  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
Max Belov
Пробовал через case, но он возвращает значение по каждой строке, а хотелось бы получить одно значение.
MIN()
?
11 окт 12, 21:12    [13305068]     Ответить | Цитировать Сообщить модератору
 Re: Поиск "соседей" по таблице  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5144
Max Belov
Таблица эта же.
Как проверить соблюдение последовательности по столбцу Name?
Т. е. 101 идет следом за 102 и т. д. и вернуть одно значение true, либо false если последовательность не соблюдается.

кто там выше медитировал на поле наме?
11 окт 12, 21:55    [13305198]     Ответить | Цитировать Сообщить модератору
 Re: Поиск "соседей" по таблице  [new]
Max Belov
Member

Откуда:
Сообщений: 11
Нормально, Кришна почти ответил.

Maxx спасибо, принцип понял.
11 окт 12, 22:02    [13305213]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить