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

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

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

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

выполните подзапрос отдельно и посмотрите получаете ли вы минимальную цену
...
Рейтинг: 0 / 0
22.11.2018, 22:50
    #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
22.11.2018, 22:51
    #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
22.11.2018, 23:03
    #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
23.11.2018, 05:45
    #39737275
El_Ninio
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как выбрать минимальное значение во вложенных запросах
Я неправильно объяснил, результирующая выборка должна быть из первой таблицы. Должна выбираться из первой таблицы только та запись где SERVICEID равно во второй таблице с минимальной суммой. Из скриншота первой таблицы должна остаться запись где SERVICEID=7357 потому что она во второй таблице с минимальной суммой.
...
Рейтинг: 0 / 0
23.11.2018, 05:55
    #39737277
PizzaPizza
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как выбрать минимальное значение во вложенных запросах
El_NinioЯ неправильно объяснил, результирующая выборка должна быть из первой таблицы. Должна выбираться из первой таблицы только та запись где SERVICEID равно во второй таблице с минимальной суммой. Из скриншота первой таблицы должна остаться запись где SERVICEID=7357 потому что она во второй таблице с минимальной суммой.

OMG... Так вы и начните по порядку. 1. Получите SERVICEID для начала из второй таблицы. 2. Используйте полученный SERVICEID для выборки из первой таблицы.
Вы получаете SERVICEID отдельно или нет? Если вы его получаете, но он не тот, который вы хотите, тогда думайте ещё раз про вашу минимальную сумму.
Запрос courtа из приведенных вами данных выдаст именно 7357.
...
Рейтинг: 0 / 0
23.11.2018, 06:30
    #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
23.11.2018, 07:18
    #39737286
PizzaPizza
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как выбрать минимальное значение во вложенных запросах
El_Ninio,

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


не выдает ничего, то вы и не получите ничего внятного
разбирайтесь сначала с подзапросом, почему вы не получаете нужный ID
...
Рейтинг: 0 / 0
23.11.2018, 07:46
    #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
23.11.2018, 09:17
    #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
23.11.2018, 09:43
    #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
23.11.2018, 15:31
    #39737554
El_Ninio
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как выбрать минимальное значение во вложенных запросах
Kopelly,спасибо большое!
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как выбрать минимальное значение во вложенных запросах / 22 сообщений из 22, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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