Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Informix [игнор отключен] [закрыт для гостей] / Помогите составить запрос. / 25 сообщений из 34, страница 1 из 2
07.11.2008, 11:04
    #35639435
Ivan_kez
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос.
Доброго времени суток!

Есть запрос
Код: plaintext
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.
SELECT
    r_kod,
    in_date,
    in_pkod
FROM
    invoice,
    goods_r
WHERE
    in_ttype= 1 
AND
    in_key=r_key
AND
    r_kod
IN (
    SELECT
        r_kod
    FROM
        invoice,
        goods_r
    WHERE
        in_pkod='А01'
    AND
        in_ttype= 1 
    AND
        in_key=r_key
    )
    ORDER BY
        r_kod

На выходе получаю
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
 100561 	 2006 - 07 - 26 		А01
 100561 	 2007 - 03 - 28 		А01
 100561 	 2006 - 04 - 19 		А01
 100561 	 2006 - 04 - 11 		А01
 100561 	 2006 - 08 - 15 		А01
 100561 	 2008 - 04 - 07 		ююt
 100561 	 2006 - 02 - 21 		А01
 100563 	 2007 - 06 - 20 		А01
 100563 	 2007 - 05 - 30 		А01
 100563 	 2006 - 06 - 21 		А01
 100563 	 2006 - 02 - 21 		А01
 100564 	 2008 - 08 - 21 		ююt
 100564 	 2008 - 06 - 20 		ююt
 100564 	 2006 - 04 - 11 		А01
 100564 	 2006 - 02 - 21 		А01
 100564 	 2008 - 04 - 07 		ююt
...

хочется получить эти же поля, но дергать максимальную дату на каждое поле r_kod и делать проверку на соответствие in_pkod='А01'. (!)Временную таблицу не создать.
Голову сломал!
...
Рейтинг: 0 / 0
07.11.2008, 13:37
    #35639980
АнатоЛой
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос.
Сложно понять, что должен делать нужный тебе запрос по приведённому запросу, который делает не то что нужно :) :(
Лучше приводить структуру таблиц и "словами сформулированный" запрос...
...
Рейтинг: 0 / 0
07.11.2008, 14:05
    #35640111
Ivan_kez
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос.
Ок. попробую так)
Есть две таблицы.
invoice - шапки накладных
goods_r - тело накладных
связаны по in_key и r_key соответственно.
in_ttype - тип накладной. "1" символизирует приход.
in_pkod - код поставщика.
r_kod - товар.

(!)Один и тот же товар могут поставлять разные поставщики.

Задача:
Выбрать весь товар, последним поставщиком которого является поставщик с кодом "А01"
...
Рейтинг: 0 / 0
07.11.2008, 15:34
    #35640366
АнатоЛой
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос.
Версия IDS, чтоб мы знали возможности вашего SQL :)
...
Рейтинг: 0 / 0
07.11.2008, 16:08
    #35640492
Ivan_kez
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос.
серверов очень много и разные версии.
низшая - 7.30.UC10
...
Рейтинг: 0 / 0
07.11.2008, 16:30
    #35640590
olleg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос.
Что-то этакое можно попробывать использовать
Код: plaintext
1.
...   and  in_date =(select max(in_date ) from ...) ...
...
Рейтинг: 0 / 0
07.11.2008, 16:58
    #35640693
Ivan_kez
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос.
ollegЧто-то этакое можно попробывать использовать
Код: plaintext
1.
...   and  in_date =(select max(in_date ) from ...) ...

Да не) Я чего только не перепробывал.
в этом случае вернется одна дата - максимальная. А мне то нужно для каждого товара.
...
Рейтинг: 0 / 0
07.11.2008, 17:12
    #35640736
Daugava
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос.
Для 7.3 думаю без временных таблиц лучше не пытаться, там извратов с set-ом нет.
Вообще, запрос реален, но сугубо в академических целях. Если данных маломальски много, я бы даже не пытался.

Для упрощения, подготовьте sql создающий таблички, тестовые данные и результат, которые хочется получить.

Если вы датите честное слово, что потом все таки переделаете на временную таблицу, я вам сделаю изврат.
...
Рейтинг: 0 / 0
07.11.2008, 17:17
    #35640748
Ikir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос.
SELECT
r_kod,
max(in_date)
FROM
invoice,
goods_r
WHERE
in_ttype=1
AND
in_key=r_key
AND
in_pkod = 'A01'
GROUP BY r_kod
ORDER BY r_kod
...
Рейтинг: 0 / 0
07.11.2008, 17:22
    #35640772
Ivan_kez
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос.
Daugava , спасибо за ответ!
Тоже думал что нереализуемо, но надежда умирает последней)
...
Рейтинг: 0 / 0
07.11.2008, 17:25
    #35640779
Ivan_kez
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос.
Daugava , на временную переделать не получится 100 процентно)
User БД дан с жесткими ограничениями расширить которые не представляется возможным.
авторДля упрощения, подготовьте sql создающий таблички, тестовые данные и результат, которые хочется получить.
т.е. все же можно в один запрос нужные мне данные?
...
Рейтинг: 0 / 0
07.11.2008, 17:53
    #35640856
Daugava
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос.
А написать свою процедуру нельзя?
Еще одно, у товаров и накладных id надеюсь есть? Или в течение дня один товар может быть поставлен только одним поставщиком и только один раз?
...
Рейтинг: 0 / 0
07.11.2008, 18:11
    #35640896
onstat-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос.
Ivan_kezОк. попробую так)
Есть две таблицы.
invoice - шапки накладных
goods_r - тело накладных
связаны по in_key и r_key соответственно.
in_ttype - тип накладной. "1" символизирует приход.
in_pkod - код поставщика.
r_kod - товар.

(!)Один и тот же товар могут поставлять разные поставщики.

Задача:
Выбрать весь товар, последним поставщиком которого является поставщик с кодом "А01"

Приблизительно так

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
select r_kod, in_date, in_pkod
from goods_r r1, invoice i1
where i.in_key=r.r_key
and  i1.in_pkod= "А01"
and in_date =  (
select max(in_date) 
from  goods_r r1, invoice i2
where  i2.in_key=r2.r_key and i1.in_pkod=i2.inp_kod  and r1.r_kod=r2.k_kod
)

но работать может долго .
...
Рейтинг: 0 / 0
07.11.2008, 20:14
    #35641078
АнатоЛой
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос.
onstat-но работать может долго .
помогло?
если нет - то вопрос "r_key - это точно поле внешнего ключа в таблице goods_r на таблицу invoice?"

если помогло но ОЧЕНЬ медленно - возможно нет "правильных" индексов...
...
Рейтинг: 0 / 0
10.11.2008, 11:22
    #35643396
Ivan_kez
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос.
Спасибо за помощь!
У Вас запрос был написан с небольшими помарками. Я исправил
авторselect r_kod, in_date, in_pkod
from goods_r r1, invoice i1
where i1.in_key=r1.r_key
and i1.in_pkod= 'А01'
and in_date = (
select max(in_date)
from goods_r r2, invoice i2
where i2.in_key=r2.r_key and i1.in_pkod=i2.in_pkod and r1.r_kod=r2.r_kod
)
работает действительно долго, но при этом еще и некорректно(.
...
Рейтинг: 0 / 0
10.11.2008, 11:35
    #35643434
onstat-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос.
Ivan_kezСпасибо за помощь!
У Вас запрос был написан с небольшими помарками. Я исправил
авторselect r_kod, in_date, in_pkod
from goods_r r1, invoice i1
where i1.in_key=r1.r_key
and i1.in_pkod= 'А01'
and in_date = (
select max(in_date)
from goods_r r2, invoice i2
where i2.in_key=r2.r_key and i1.in_pkod=i2.in_pkod and r1.r_kod=r2.r_kod
)
работает действительно долго, но при этом еще и некорректно(.

За некорректность прошу прощения, там действительно опечатка есть.
А вот на счет не правильно , тут можно поспорить, запрос работает в соответствии с поставленной Вами задачей. Целью моего примера было показать Вам, что при данной постановке задачи
можно использовать коррелированный подзапрос в запросе. Зная что его можно использовать
добиться правильности это уже Ваша работа, Вам за нее деньги платят.

Вопрос скорости это уже другая тема, я предупреждал, что может быть долго, так как неизвестно какие индексы у Вас там построены.
...
Рейтинг: 0 / 0
10.11.2008, 11:43
    #35643461
АнатоЛой
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос.
Ivan_kezработает ... некорректно(.

AnatoLoyr_key - это точно поле внешнего ключа в таблице goods_r на таблицу invoice?
...
Рейтинг: 0 / 0
10.11.2008, 12:15
    #35643568
Ivan_kez
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос.
Дело в том что я топтался в самом начале возле того же)
Как раз таки я пока не знаю как наложить условие что именно А01 является последним поставщиком . Буду признателен если покажите в какую сторону смотреть.
...
Рейтинг: 0 / 0
10.11.2008, 12:17
    #35643577
Ivan_kez
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос.
АнатоЛойIvan_kezработает ... некорректно(.

AnatoLoyr_key - это точно поле внешнего ключа в таблице goods_r на таблицу invoice?

абсолютно!
...
Рейтинг: 0 / 0
10.11.2008, 12:19
    #35643583
Daugava
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос.
Вопрос жуется с пятницы. Однако таки все таки воспользуйтесь советом из ФАК-а. Создайте тестовый пример и поместите здесь. Мне лично не лень поэксперементировать с запросом, но подготавливать данные для него облом, тем более, если в итоге окажется, что я неправильно понял ваше описание структуры таблиц.
Опять таки, мой вопрос остался без ответа.
...
Рейтинг: 0 / 0
10.11.2008, 12:39
    #35643657
Помогите составить запрос.
2 Автор
внешнее левое соединение тебе в помощь...
...
Рейтинг: 0 / 0
10.11.2008, 12:58
    #35643718
Ivan_kez
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос.
DaugavaА написать свою процедуру нельзя?
Еще одно, у товаров и накладных id надеюсь есть? Или в течение дня один товар может быть поставлен только одним поставщиком и только один раз?
процедуру написать невозможно ибо нет прав.
в таблице invoice (таблица шапок накладных) id - in_key
в таблице goods_r (таблица тел накладных) уникальных полей нет.
Товар может поставляться сколько угодно раз любым поставщиком.
...
Рейтинг: 0 / 0
10.11.2008, 14:39
    #35644093
АнатоЛой
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос.
1. Покажите в чём некорректность запроса, привдённого "onstat-"...
2. Добавьте в запрос алиасы ко всем именам столбцов...
...
Рейтинг: 0 / 0
10.11.2008, 16:48
    #35644544
Ivan_kez
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос.
некорректно отрабатывает - не выполняется условие Выбрать весь товар, последним поставщиком которого является поставщик с кодом "А01"
т.е. выбирается товар поставщика А01,а за тем из него цепляется максимальная дата.
Задача немного в другом...
Поставщиков много и один товар могут поставлять 3 (или более) поставщика
Код: plaintext
1.
2.
 102562      10 . 06 . 2006     А01
 102562      02 . 11 . 2006     Ы22
 102562      10 . 06 . 2006     ВЩБ
соответственно такой товар не нужен т.к. согласно задаче нужно что бы последним поставщиком был А01

Код: plaintext
1.
2.
 102562      10 . 06 . 2006     А01
 102562      02 . 11 . 2006     Ы22
 102562      10 . 06 . 2006     А01
а вот такой товар должен попасть под выборку.

Алиасы добавил!
...
Рейтинг: 0 / 0
10.11.2008, 17:26
    #35644660
АнатоЛой
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос.
Ivan_kezЗадача немного в другом...
Мы от Вас и добиваемся постановки этой задачи :)

Ivan_kez
Поставщиков много и один товар могут поставлять 3 (или более) поставщика
Код: plaintext
1.
2.
3.
 102562      10 . 06 . 2006     А01
 102562      02 . 11 . 2006     Ы22
 102562      10 . 06 . 2006     ВЩБ
соответственно такой товар не нужен т.к. согласно задаче нужно что бы последним поставщиком был А01
Код: plaintext
1.
2.
 102562      10 . 06 . 2006     А01
 102562      02 . 11 . 2006     Ы22
 102562      10 . 06 . 2006     А01
а вот такой товар должен попасть под выборку.


В обоих примерах - последним поставшиком исходя из даты был Ы22....
Спокойно соберитесь с мыслями - и не спеша напишите постановку задачи с примерами ...
...
Рейтинг: 0 / 0
Форумы / Informix [игнор отключен] [закрыт для гостей] / Помогите составить запрос. / 25 сообщений из 34, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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