powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как выбрать минимальное значение во вложенных запросах
22 сообщений из 22, страница 1 из 1
Как выбрать минимальное значение во вложенных запросах
    #39736917
El_Ninio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как правильно написать в этом запросе, чтобы выбирался минимальное значение из таблицы 2.
select * from Table1 where ServiceID in (Select rf_ServiceID from Table2 where Value1=min(Value1))
...
Рейтинг: 0 / 0
Как выбрать минимальное значение во вложенных запросах
    #39736928
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
... in (Select top 1 rf_ServiceID from Table2 order by Value1)
...
Рейтинг: 0 / 0
Как выбрать минимальное значение во вложенных запросах
    #39736930
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
court... in (Select top 1 rf_ServiceID from Table2 order by Value1)
а 2 rf_ServiceID не могут иметь одинаковое min(Value1) ?
...
Рейтинг: 0 / 0
Как выбрать минимальное значение во вложенных запросах
    #39736943
El_Ninio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
court, ничего не возвращает(
...
Рейтинг: 0 / 0
Как выбрать минимальное значение во вложенных запросах
    #39736948
El_Ninio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
court, тут я забыл еще одно условие написать
вот так должно быть
select * from Table1 where ServiceID in (Select rf_ServiceID from Table2 where Value1=min(Value1)) and DocID=11
...
Рейтинг: 0 / 0
Как выбрать минимальное значение во вложенных запросах
    #39736956
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
El_Niniocourt, ничего не возвращает(бывает ...
...
Рейтинг: 0 / 0
Как выбрать минимальное значение во вложенных запросах
    #39736962
El_Ninio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вообщем, в таблице 1 в документе с айди 11 serviceid разные, например 100, 155, 138, 120 и так далее, это ну скажем, выполненные услуги, а их цена во второй таблице, где переменная Value1. Мне надо минимальную сумму выбрать из этих выполненных услуг.
...
Рейтинг: 0 / 0
Как выбрать минимальное значение во вложенных запросах
    #39736975
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
El_NinioВообщем, в таблице 1 в документе с айди 11 serviceid разные, например 100, 155, 138, 120 и так далее, это ну скажем, выполненные услуги, а их цена во второй таблице, где переменная Value1. Мне надо минимальную сумму выбрать из этих выполненных услуг.

Тестовый набор данных закиньте сюда, чтобы вам могли что-то сказать вразумительное.

Скорее всего вам OUTER APPLY нужен или оконная функция
...
Рейтинг: 0 / 0
Как выбрать минимальное значение во вложенных запросах
    #39736994
El_Ninio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Таблиц прикрепил
...
Рейтинг: 0 / 0
Как выбрать минимальное значение во вложенных запросах
    #39737074
El_Ninio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Люди, помогитееее. Как мне выбрать мин значение из Value1
...
Рейтинг: 0 / 0
Как выбрать минимальное значение во вложенных запросах
    #39737153
PizzaPizza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
El_Ninio,

чем вам не нравится вариант
court... in (Select top 1 rf_ServiceID from Table2 order by Value1) ?

выполните подзапрос отдельно и посмотрите получаете ли вы минимальную цену
...
Рейтинг: 0 / 0
Как выбрать минимальное значение во вложенных запросах
    #39737215
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PizzaPizzaEl_Ninio,

чем вам не нравится вариант
court... in (Select top 1 rf_ServiceID from Table2 order by Value1) ?

выполните подзапрос отдельно и посмотрите получаете ли вы минимальную цену

следует учитывать что распределение данных в таблице 2 у ТС может быть к примеру такое:

ServiceID Value1
501 1
502 2
503 1
504 10

тогда запрос лучше нарисовать так:
Код: sql
1.
2.
3.
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]))



или так
Код: sql
1.
2.
select * from [Table1] t1
where t1.[ServiceID] in (select top 1 with ties [rf_ServiceID] from [Table2] order by [Value1] ASC)
...
Рейтинг: 0 / 0
Как выбрать минимальное значение во вложенных запросах
    #39737216
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чорд:
Код: sql
1.
2.
3.
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))
...
Рейтинг: 0 / 0
Как выбрать минимальное значение во вложенных запросах
    #39737222
londinium
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
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
...
Рейтинг: 0 / 0
Как выбрать минимальное значение во вложенных запросах
    #39737275
El_Ninio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я неправильно объяснил, результирующая выборка должна быть из первой таблицы. Должна выбираться из первой таблицы только та запись где SERVICEID равно во второй таблице с минимальной суммой. Из скриншота первой таблицы должна остаться запись где SERVICEID=7357 потому что она во второй таблице с минимальной суммой.
...
Рейтинг: 0 / 0
Как выбрать минимальное значение во вложенных запросах
    #39737277
PizzaPizza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
El_NinioЯ неправильно объяснил, результирующая выборка должна быть из первой таблицы. Должна выбираться из первой таблицы только та запись где SERVICEID равно во второй таблице с минимальной суммой. Из скриншота первой таблицы должна остаться запись где SERVICEID=7357 потому что она во второй таблице с минимальной суммой.

OMG... Так вы и начните по порядку. 1. Получите SERVICEID для начала из второй таблицы. 2. Используйте полученный SERVICEID для выборки из первой таблицы.
Вы получаете SERVICEID отдельно или нет? Если вы его получаете, но он не тот, который вы хотите, тогда думайте ещё раз про вашу минимальную сумму.
Запрос courtа из приведенных вами данных выдаст именно 7357.
...
Рейтинг: 0 / 0
Как выбрать минимальное значение во вложенных запросах
    #39737281
El_Ninio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PizzaPizza, при выполнении запроса court ничего не выбирается.
select * from Table1 where DocID=507473 and SERVICEID in (Select TOP 1 rf_ServiceID from oms_Tariff order by Value1)
тут еще по конкретному документу же ищется, документ с номером 507473.
...
Рейтинг: 0 / 0
Как выбрать минимальное значение во вложенных запросах
    #39737286
PizzaPizza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
El_Ninio,

если у вас подзапрос
Код: sql
1.
Select TOP 1 rf_ServiceID from oms_Tariff order by Value1


не выдает ничего, то вы и не получите ничего внятного
разбирайтесь сначала с подзапросом, почему вы не получаете нужный ID
...
Рейтинг: 0 / 0
Как выбрать минимальное значение во вложенных запросах
    #39737289
El_Ninio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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. А если документов много, хочу по каждому документу найти мин значение то как сделать?
...
Рейтинг: 0 / 0
Как выбрать минимальное значение во вложенных запросах
    #39737306
PizzaPizza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
El_NinioPizzaPizza, если выполнить вот так:
Код: sql
1.
2.
3.
4.
5.
select * from Table1 
where ServiceID= 
(Select top 1 rf_ServiceID from Table2 w
here rf_ServiceID in 
(select ServiceID from Table1 where DOCID=507473) order by Value1) and DocID=507473



то получаю что мне нужно, по конкретному документу DOCID=507473.

Вы выбираете из Table1 ServiceID для всех строк с DOCID=507473, потом выбираете по сути тот же ServiceID для одной строки из Table2 с минимальным Value1, и в конце выбираете из Table1 строки с DOCID=507473 и полученным ранее для него же ServiceID.
Какой смысл тут во второй таблице, если вы по сути выбираете из Table1 строки с DOCID=507473? Никак минимальность значения не используется в запросе. Единственное, что вы получаете проверку, что у вас во второй таблице есть запись с ServiceID для DOCID=507473

Код: sql
1.
2.
select * from Table1 
where DocID=507473


Этот запрос даст тот же результат, что и ваш.

El_Ninio А если документов много, хочу по каждому документу найти мин значение то как сделать?

Вами приведенный запрос не выбирает минимальное значение. Это должен быть совершенно иной запрос, если вам нужно для нескольких документов найти минимальные значения.

Попробуйте сформулировать задачу ещё раз. Что вам надо выбрать и с каким условием.
...
Рейтинг: 0 / 0
Как выбрать минимальное значение во вложенных запросах
    #39737322
Kopelly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
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
...
Рейтинг: 0 / 0
Как выбрать минимальное значение во вложенных запросах
    #39737554
El_Ninio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kopelly,спасибо большое!
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как выбрать минимальное значение во вложенных запросах
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]