Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
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] Ответить | Цитировать Сообщить модератору |
Дедушка Member Откуда: Город трёх революций Сообщений: 5114 |
как "соседей" определяете? |
10 окт 12, 12:44 [13295106] Ответить | Цитировать Сообщить модератору |
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] Ответить | Цитировать Сообщить модератору |
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] Ответить | Цитировать Сообщить модератору |
Дедушка Member Откуда: Город трёх революций Сообщений: 5114 |
trew, а если наме не растёт монотонно и последовательно? |
10 окт 12, 12:46 [13295125] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47049 |
Может, просто пронумеровать ROW_NUMBERом и взять текущую ± 1? |
10 окт 12, 12:47 [13295143] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47049 |
|
||
10 окт 12, 12:48 [13295156] Ответить | Цитировать Сообщить модератору |
Дедушка Member Откуда: Город трёх революций Сообщений: 5114 |
iap, дак я и спросил "как "соседей" определяете?" ибо только автор может это знать. |
10 окт 12, 12:50 [13295171] Ответить | Цитировать Сообщить модератору |
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] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47049 |
|
||||
10 окт 12, 13:28 [13295560] Ответить | Цитировать Сообщить модератору |
Дедушка Member Откуда: Город трёх революций Сообщений: 5114 |
iap, хорошо, хорошо я собственно не против... только автор так и не ответил. и существует вероятность, что эти самые 102 и 104 приведены для конкретного куска данных, а что за его границами неизвестно. |
10 окт 12, 13:42 [13295698] Ответить | Цитировать Сообщить модератору |
Max Belov Member Откуда: Сообщений: 11 |
Спасибо за отзывы Соседей хочу определить зная id |
10 окт 12, 15:07 [13296496] Ответить | Цитировать Сообщить модератору |
Max Belov Member Откуда: Сообщений: 11 |
еще хотелось бы узнать имеет ли guid какой-нибудь "вес" или служит только для определения уникальности ключа? PS для гуру которые не любят вопросы зеленых, отвечаю сразу, оракул гугла на этот вопрос мне не ответил. |
10 окт 12, 15:12 [13296530] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47049 |
![]() В такой неясной постановке Вам никто-никто не ответит! |
||
10 окт 12, 15:21 [13296629] Ответить | Цитировать Сообщить модератору |
или фазе луны
Guest |
????????
что не удивительно что такое "вес", для чего этот "вес", в контексте чего, о чем речь вообще? почему вопрос о "весе" задан только по гуиду, а не по второму столбцу или, например, по имени таблицы, или дате, или фазе луны? |
||||
10 окт 12, 15:26 [13296693] Ответить | Цитировать Сообщить модератору |
Max Belov Member Откуда: Сообщений: 11 |
Jovanny прекрасно меня понял(за что ему большое спасибо) Под "весом" имел ввиду его значение (можно ли над ним совершать арифметические и логические действа) или он служит только для определения уникальности ключа?(вопрос возможно глупый, но интерес не всегда бывает разумным) |
10 окт 12, 15:34 [13296797] Ответить | Цитировать Сообщить модератору |
от лукавого
Guest |
Max Belov, смыслов в гуиде как в типе данных нет никаких кроме хранения глобально уникального id. как и с любым другим типом данных с ним можно просто тупо взять и что-нибудь сделать (сложить, вычесть и т.д.), но это всё от лукавого, от гуида не нужно хотеть ничего и никогда кроме уникальности. даже sequential гуиды - это бред. костыль для хромых на всю голову систем. наверняка из-за этой затей некоторые "колеблющиеся" решили что в гуиде все-таки есть "смысл" и переметнулись на темную сторону. пересекался с ребятами, которые брали от гуида md5, кастовали обратно к гуиду и называли это "дочерний гуид". это вывих мозга. |
10 окт 12, 16:16 [13297235] Ответить | Цитировать Сообщить модератору |
Max Belov Member Откуда: Сообщений: 11 |
Вопрос другой (не стал создавать отдельную тему для экономии) Таблица эта же. Как проверить соблюдение последовательности по столбцу Name? Т. е. 101 идет следом за 102 и т. д. и вернуть одно значение true, либо false если последовательность не соблюдается. Пробовал через case, но он возвращает значение по каждой строке, а хотелось бы получить одно значение. |
11 окт 12, 20:30 [13304922] Ответить | Цитировать Сообщить модератору |
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] Ответить | Цитировать Сообщить модератору |
Mind Member Откуда: Лучший город на Земле Сообщений: 2322 |
MIN()? |
||
11 окт 12, 21:12 [13305068] Ответить | Цитировать Сообщить модератору |
Дедушка Member Откуда: Город трёх революций Сообщений: 5114 |
кто там выше медитировал на поле наме? ![]() |
||
11 окт 12, 21:55 [13305198] Ответить | Цитировать Сообщить модератору |
Max Belov Member Откуда: Сообщений: 11 |
Нормально, Кришна почти ответил. Maxx спасибо, принцип понял. |
11 окт 12, 22:02 [13305213] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |