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

Откуда:
Сообщений: 44
Имею таблицу
Idnew_iddocument_numberStatus
6155FF121
65555FF122

как мне вытащить строку вида
615555FF12

Запрос в роде
select id, new_id, (select ?), document_number, where document_number = '55FF12' and status = '1'

где select ? требуется найти вторую запись используя id и document_number первой строки
28 фев 16, 07:43    [18873147]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с подзапросом  [new]
maxim111
Member

Откуда:
Сообщений: 44
где select ? требуется найти new_id второй строки используя id и document_number первой строки
28 фев 16, 07:45    [18873149]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с подзапросом  [new]
Elic
Member

Откуда:
Сообщений: 29988
RTFM LEAD (FAQ)
28 фев 16, 07:48    [18873151]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с подзапросом  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 54383
а что такое "вторая строка"?
28 фев 16, 07:49    [18873152]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с подзапросом  [new]
Opus Magnum
Member

Откуда: 77 Rus
Сообщений: 2205
maxim111,

Задание несколько развернутее бы надо, мне кажется.
28 фев 16, 08:17    [18873162]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с подзапросом  [new]
maxim111
Member

Откуда:
Сообщений: 44
Opus Magnum
maxim111,

Задание несколько развернутее бы надо, мне кажется.

Я еще и неправильно вопрос задал, мозг кипит, а я туплю. В моем условии должна использоваться дата. Вот таблица ( в ней много примного записей)
Idnew_iddocument_numberStatusDate
6155FF12113.01.2016
65555FF12225.02.2016
33544АА11110.10.2015
39144АА11210.10.2015

Напишу как реализовано на данный момент -
Получаю данные следующим кодом
select id, new_id, document_number where date >= '01.01.2001' and status = '1'

результате получаю таблицу
Idnew_iddocument_number
6155FF12
33544АА11

дальше циклом по коллекции из полученной таблицы добавляю 4 колонку
select new_id where where id ='6' and document_number='55FF12' 

Получаю
new_id
55

И уже программным способом (.Net datatable.rows[i][3] = ...) объединяю 6 1 55FF12 + 55.
Дело в том, что запрос типа
select id, new_id, document_number where date >= '01.01.2001' and status = '1'

обрабатывается за 15сек и выдает результат на 100-200строк (что устраивает)
Далее когда я циклом foreach иду по результату запроса создается 100-200 дополнительных запросов,
select new_id where where id ='' and document_number=''
а их время выполнения уже около 1 минуты.
Структура таблицы такова, что в ней не более 2х записей с одинаковыми id и document_number.
Ну и для наглядности что я хочу получить в итоге одним запросом
Idnew_id document_number new_id2
6155FF1255
33544АА1191

Ну вроде бы сейчас правильно описал желаемое.
28 фев 16, 09:31    [18873208]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с подзапросом  [new]
maxim111
Member

Откуда:
Сообщений: 44
New_id уникально у каждой записи, а status у того new_id который мне нужно вытащить только 2
28 фев 16, 09:42    [18873214]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с подзапросом  [new]
maxim111
Member

Откуда:
Сообщений: 44
[quot maxim111]
Opus Magnum
maxim111,

[/CSV]
дальше циклом по коллекции из полученной таблицы добавляю 4 колонку
select new_id where where id ='6' and document_number='55FF12' 

Получаю
new_id
55


select new_id where where id ='6' and document_number='55FF12' and status ='2'
28 фев 16, 10:02    [18873223]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с подзапросом  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
maxim111,

достаточно и агрегативных min,max

select id, min(new_id) ,max(new_id) 
-- ..
group by id
28 фев 16, 11:14    [18873312]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с подзапросом  [new]
maxim111
Member

Откуда:
Сообщений: 44
orawish
maxim111,

достаточно и агрегативных min,max

select id, min(new_id) ,max(new_id) 
-- ..
group by id

Что то не догоняю,куда тут
select id, new_id, document_number where date >= '01.01.2001' and status = '1'

min max вставить
28 фев 16, 13:39    [18873596]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с подзапросом  [new]
dbi
Member

Откуда: http://dbi.ru
Сообщений: 111
maxim111,

А если так?
28 фев 16, 14:56    [18873720]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с подзапросом  [new]
dbi
Member

Откуда: http://dbi.ru
Сообщений: 111
maxim111,

Недопечатал)))

select id, LISTAGG(new_id, ', ') WITHIN GROUP (order by Status), document_number where date >= '01.01.2001' group by id, document_number


НА выводе будет три колонки, где вторая с обоими значениями, можно потом разбить на две, если обернуть это еще в один запрос.
28 фев 16, 14:57    [18873723]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с подзапросом  [new]
maxim111
Member

Откуда:
Сообщений: 44
Решение найдено с помощью подзапроса. Опубликую позже.
28 фев 16, 15:47    [18873812]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить