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

Откуда: Пермь
Сообщений: 60
Здравствуйте!
Такая задача. Есть 2 таблицы в одной значения забиты не точно. Нужно их сверить со значениями в другой таблице.
Если таких же значений нет, то нужна строчка с самыми ближними бОльшими значениями. Пример таблиц на картинке. Нужно это сделать в MS Sql.

Вот что-то пыталась, но не тот результат

Select MIN(Таблица 2.диаметр 1) as д1, min(Таблица 2.диаметр 2) as д2, MINТаблица 2.замер) as зам
from Таблица 2 inner join Таблица 1 ON
Таблица 2.диаметр 1>= Таблица 1.диаметр 1
AND
Таблица 2.диаметр 2>= Таблица 1.диаметр 2
AND
Таблица 2.замер>= Таблица 1.замер

Подскажите, пожалуйста, может кто-то знает. Спасибо!

К сообщению приложен файл. Размер - 16Kb
28 дек 16, 08:54    [20055161]     Ответить | Цитировать Сообщить модератору
 Re: Найти ближайшие бОльшие значения в таблице Sql  [new]
SandraSidorova
Member

Откуда: Пермь
Сообщений: 60
В коде еще group by конечно есть
28 дек 16, 08:55    [20055167]     Ответить | Цитировать Сообщить модератору
 Re: Найти ближайшие бОльшие значения в таблице Sql  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31425
SandraSidorova
Такая задача. Есть 2 таблицы в одной значения забиты не точно. Нужно их сверить со значениями в другой таблице.
Если таких же значений нет, то нужна строчка с самыми ближними бОльшими значениями. Пример таблиц на картинке. Нужно это сделать в MS Sql.

Как то так:
Select isnull(t2.диаметр1, t21.диаметр1) as д1, isnull(t2.диаметр2, t22.диаметр2) as д2, isnull(t2.замер, t23.замер) as зам
from Таблица1 as t1 
	left join Таблица2 as t2 
		ON t2.диаметр1 = t1.диаметр1 
		AND t2.диаметр2 = t1.диаметр2
		AND t2.замер = t1.замер
	cross apply (
			SELECT MIN(диаметр1) as диаметр1 
			FROM Таблица2 as t21
			WHERE t21.диаметр1 >= t1.диаметр1 
		) as t21
	cross apply (
			SELECT MIN((диаметр2) as диаметр2
			FROM Таблица2 as t22
			WHERE t22.диаметр2 >= t1.диаметр2
		) as t22
	cross apply (
		SELECT MIN(замер) as замер
			FROM Таблица2 as t23
			WHERE t23.замер >= t1.замер
		) as t23
		
28 дек 16, 09:14    [20055206]     Ответить | Цитировать Сообщить модератору
 Re: Найти ближайшие бОльшие значения в таблице Sql  [new]
SandraSidorova
Member

Откуда: Пермь
Сообщений: 60
alexeyvg,
Большое спасибо! очень помогли! А как бы еще номер строки второй таблицы, в которой мы взяли значение. Если добавить еще колонку с порядковым номером во вторую таблицу. Спасибо
28 дек 16, 09:38    [20055249]     Ответить | Цитировать Сообщить модератору
 Re: Найти ближайшие бОльшие значения в таблице Sql  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31425
SandraSidorova
А как бы еще номер строки второй таблицы, в которой мы взяли значение.
Эээ нет, по условиям задачи (и по вашим примерам данных) мы берём отдельные поля из разных строк второй таблицы. Какой же номер нужно брать, если строки разные???
Если нужно брать целиком строку, а не отдельные поля, то запрос будет совсем другой.

Сам номер можно получить, заменив подзапросы:
SELECT MIN((диаметр2) as диаметр2
FROM Таблица2 as t22
WHERE t22.диаметр2 >= t1.диаметр2
на
SELECT TOP 1 t22.ИД, t22.диаметр2
FROM Таблица2 as t22
WHERE t22.диаметр2 >= t1.диаметр2
ORDER BY t22.диаметр2
28 дек 16, 09:44    [20055261]     Ответить | Цитировать Сообщить модератору
 Re: Найти ближайшие бОльшие значения в таблице Sql  [new]
SandraSidorova
Member

Откуда: Пермь
Сообщений: 60
alexeyvg,

Оказалось не то) нужно не в каждой колонке значения искать приближенные. А одну строку, все значения которой бы полностью подходили под условие. Может я не так что-то поняла, но по Вашему примеру у меня не получилось(
Все равно, Большое спасибо!
28 дек 16, 11:41    [20055729]     Ответить | Цитировать Сообщить модератору
 Re: Найти ближайшие бОльшие значения в таблице Sql  [new]
SandraSidorova
Member

Откуда: Пермь
Сообщений: 60
Я все-таки разобралась! Спасибо еще раз Вам за Ваш пример!
28 дек 16, 11:50    [20055783]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить