Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
El_Ninio Member Откуда: Сообщений: 52 |
Как правильно написать в этом запросе, чтобы выбирался минимальное значение из таблицы 2. select * from Table1 where ServiceID in (Select rf_ServiceID from Table2 where Value1=min(Value1)) |
22 ноя 18, 15:48 [21741544] Ответить | Цитировать Сообщить модератору |
court Member Откуда: Сообщений: 2253 |
... in (Select top 1 rf_ServiceID from Table2 order by Value1) |
22 ноя 18, 15:54 [21741560] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
а 2 rf_ServiceID не могут иметь одинаковое min(Value1) ? |
||
22 ноя 18, 15:55 [21741564] Ответить | Цитировать Сообщить модератору |
El_Ninio Member Откуда: Сообщений: 52 |
court, ничего не возвращает( |
22 ноя 18, 16:03 [21741584] Ответить | Цитировать Сообщить модератору |
El_Ninio Member Откуда: Сообщений: 52 |
court, тут я забыл еще одно условие написать вот так должно быть select * from Table1 where ServiceID in (Select rf_ServiceID from Table2 where Value1=min(Value1)) and DocID=11 |
22 ноя 18, 16:07 [21741590] Ответить | Цитировать Сообщить модератору |
court Member Откуда: Сообщений: 2253 |
|
||
22 ноя 18, 16:11 [21741600] Ответить | Цитировать Сообщить модератору |
El_Ninio Member Откуда: Сообщений: 52 |
Вообщем, в таблице 1 в документе с айди 11 serviceid разные, например 100, 155, 138, 120 и так далее, это ну скажем, выполненные услуги, а их цена во второй таблице, где переменная Value1. Мне надо минимальную сумму выбрать из этих выполненных услуг. |
22 ноя 18, 16:13 [21741611] Ответить | Цитировать Сообщить модератору |
a_voronin Member Откуда: Москва Сообщений: 4805 |
Тестовый набор данных закиньте сюда, чтобы вам могли что-то сказать вразумительное. Скорее всего вам OUTER APPLY нужен или оконная функция |
||
22 ноя 18, 16:25 [21741633] Ответить | Цитировать Сообщить модератору |
El_Ninio Member Откуда: Сообщений: 52 |
Таблиц прикрепил К сообщению приложен файл. Размер - 53Kb |
22 ноя 18, 16:51 [21741675] Ответить | Цитировать Сообщить модератору |
El_Ninio Member Откуда: Сообщений: 52 |
Люди, помогитееее. Как мне выбрать мин значение из Value1 |
22 ноя 18, 18:32 [21741867] Ответить | Цитировать Сообщить модератору |
PizzaPizza Member Откуда: Сообщений: 419 |
El_Ninio, чем вам не нравится вариант
выполните подзапрос отдельно и посмотрите получаете ли вы минимальную цену |
||
22 ноя 18, 20:56 [21742092] Ответить | Цитировать Сообщить модератору |
felix_ff Member Откуда: Moscow Сообщений: 1698 |
следует учитывать что распределение данных в таблице 2 у ТС может быть к примеру такое: ServiceID Value1 501 1 502 2 503 1 504 10 тогда запрос лучше нарисовать так: select * from [Table1] t1 where exists (select 1 from [Table2] t2 where t2.[rf_ServiceID] = t1.[ServiceID] and t2.[Value1] = (select min(t3.[Value1]) from [Table2])) или так select * from [Table1] t1 where t1.[ServiceID] in (select top 1 with ties [rf_ServiceID] from [Table2] order by [Value1] ASC) |
||||
22 ноя 18, 22:50 [21742182] Ответить | Цитировать Сообщить модератору |
felix_ff Member Откуда: Moscow Сообщений: 1698 |
чорд:select * from [Table1] t1 where exists (select 1 from [Table2] t2 where t2.[rf_ServiceID] = t1.[ServiceID] and t2.[Value1] = (select min(t3.[Value1]) from [Table2] t3)) |
22 ноя 18, 22:51 [21742183] Ответить | Цитировать Сообщить модератору |
londinium Member Откуда: Киев Сообщений: 1195 |
USE MASTER GO WITH CTE AS ( SELECT 507473 AS DOCID,7090 AS SERVICEID UNION ALL SELECT 507473 AS DOCID,7357 AS SERVICEID UNION ALL SELECT 507473 AS DOCID,7430 AS SERVICEID UNION ALL SELECT 507473 AS DOCID, 7430 AS SERVICEID UNION ALL SELECT 507473 AS DOCID,7430 AS SERVICEID UNION ALL SELECT 507473 AS DOCID,7430 AS SERVICEID UNION ALL SELECT 507473 AS DOCID,7476 AS SERVICEID UNION ALL SELECT 507473 AS DOCID,7476 AS SERVICEID UNION ALL SELECT 507473 AS DOCID,7476 AS SERVICEID UNION ALL SELECT 507473 AS DOCID,7289 AS SERVICEID ), SERV AS ( SELECT 7090 AS SERVICE_ID,1.18 AS VALUE1 UNION ALL SELECT 7289 AS SERVICE_ID,0.5 AS VALUE1 UNION ALL SELECT 7357 AS SERVICE_ID,0.25 AS VALUE1 UNION ALL SELECT 7430 AS SERVICE_ID,0.46 AS VALUE1 UNION ALL SELECT 7432 AS SERVICE_ID,1.25 AS VALUE1 UNION ALL SELECT 7476 AS SERVICE_ID,0.92 AS VALUE1 ) /* Вообщем, в таблице 1 в документе с айди 11 serviceid разные, например 100, 155, 138, 120 и так далее, это ну скажем, выполненные услуги, а их цена во второй таблице, где переменная Value1. Мне надо минимальную сумму выбрать из этих выполненных услуг. */ SELECT C.DOCID,C.SERVICEID,X.VALUE1 FROM CTE C CROSS APPLY ( SELECT TOP 1 S.SERVICE_ID,S.VALUE1 FROM SERV S ORDER BY S.VALUE1 )X |
22 ноя 18, 23:03 [21742190] Ответить | Цитировать Сообщить модератору |
El_Ninio Member Откуда: Сообщений: 52 |
Я неправильно объяснил, результирующая выборка должна быть из первой таблицы. Должна выбираться из первой таблицы только та запись где SERVICEID равно во второй таблице с минимальной суммой. Из скриншота первой таблицы должна остаться запись где SERVICEID=7357 потому что она во второй таблице с минимальной суммой. |
23 ноя 18, 05:45 [21742279] Ответить | Цитировать Сообщить модератору |
PizzaPizza Member Откуда: Сообщений: 419 |
OMG... Так вы и начните по порядку. 1. Получите SERVICEID для начала из второй таблицы. 2. Используйте полученный SERVICEID для выборки из первой таблицы. Вы получаете SERVICEID отдельно или нет? Если вы его получаете, но он не тот, который вы хотите, тогда думайте ещё раз про вашу минимальную сумму. Запрос courtа из приведенных вами данных выдаст именно 7357. |
||
23 ноя 18, 05:55 [21742283] Ответить | Цитировать Сообщить модератору |
El_Ninio Member Откуда: Сообщений: 52 |
PizzaPizza, при выполнении запроса court ничего не выбирается. select * from Table1 where DocID=507473 and SERVICEID in (Select TOP 1 rf_ServiceID from oms_Tariff order by Value1) тут еще по конкретному документу же ищется, документ с номером 507473. |
23 ноя 18, 06:30 [21742288] Ответить | Цитировать Сообщить модератору |
PizzaPizza Member Откуда: Сообщений: 419 |
El_Ninio, если у вас подзапрос Select TOP 1 rf_ServiceID from oms_Tariff order by Value1 не выдает ничего, то вы и не получите ничего внятного разбирайтесь сначала с подзапросом, почему вы не получаете нужный ID |
23 ноя 18, 07:18 [21742300] Ответить | Цитировать Сообщить модератору |
El_Ninio Member Откуда: Сообщений: 52 |
PizzaPizza, если выполнить вот так: select * from Table1 where ServiceID= (Select top 1 rf_ServiceID from Table2 where rf_ServiceID in (select ServiceID from Table1 where DOCID=507473) order by Value1) and DocID=507473 то получаю что мне нужно, по конкретному документу DOCID=507473. А если документов много, хочу по каждому документу найти мин значение то как сделать? |
23 ноя 18, 07:46 [21742307] Ответить | Цитировать Сообщить модератору |
PizzaPizza Member Откуда: Сообщений: 419 |
Вы выбираете из Table1 ServiceID для всех строк с DOCID=507473, потом выбираете по сути тот же ServiceID для одной строки из Table2 с минимальным Value1, и в конце выбираете из Table1 строки с DOCID=507473 и полученным ранее для него же ServiceID. Какой смысл тут во второй таблице, если вы по сути выбираете из Table1 строки с DOCID=507473? Никак минимальность значения не используется в запросе. Единственное, что вы получаете проверку, что у вас во второй таблице есть запись с ServiceID для DOCID=507473 select * from Table1 where DocID=507473 Этот запрос даст тот же результат, что и ваш.
Вами приведенный запрос не выбирает минимальное значение. Это должен быть совершенно иной запрос, если вам нужно для нескольких документов найти минимальные значения. Попробуйте сформулировать задачу ещё раз. Что вам надо выбрать и с каким условием. |
||||
23 ноя 18, 09:17 [21742352] Ответить | Цитировать Сообщить модератору |
Kopelly Member Откуда: Красноярск Сообщений: 289 |
select t1.* from Table1 t1 Outer apply (Select top 1 rf_ServiceID from Table2 where rf_ServiceID in (select ServiceID from Table1 where DOCID=t1.DOCID) order by Value1) t2 where ServiceID = rf_ServiceID |
23 ноя 18, 09:43 [21742392] Ответить | Цитировать Сообщить модератору |
El_Ninio Member Откуда: Сообщений: 52 |
Kopelly,спасибо большое! |
23 ноя 18, 15:31 [21742990] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |