powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Informix [игнор отключен] [закрыт для гостей] / Помогите составить запрос.
9 сообщений из 34, страница 2 из 2
Помогите составить запрос.
    #35644687
olleg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ivan_kez
но дергать максимальную дату

Эта дата в поле in_date?

Ivan_kez
102562 10.06.2006 А01
102562 02.11.2006 Ы22
102562 10.06.2006 А01

а вот такой товар должен попасть под выборку.

10.06.2006 более "последняя", чем 02.11.2006??
или опечатка или ??
...
Рейтинг: 0 / 0
Помогите составить запрос.
    #35644710
Ivan_kez
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за терпение!
Попробую еще раз сформулировать попонятнее)
invoice - шапки накладных
goods_r - тело накладных
связаны по in_key (первичный ключ из таблицы шапок) и r_key (внешний ключ из таблицы тел накладных) соответственно.
in_ttype - тип накладной. "1" символизирует приход.
in_pkod - код поставщика.
r_kod - товар.

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

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

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

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

Я дошел вот до такого момента:
Код: 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.
 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
Вложенный запрос создан для ограничения списка товаров(т.е. выбираем все товары, которые приходили когда-либо от нужного нам поставщика). Дальше по получившимся товарам выбираем все приходы с датой и поставщиком.
...
Рейтинг: 0 / 0
Помогите составить запрос.
    #35644714
Ivan_kez
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ollegIvan_kez
но дергать максимальную дату

Эта дата в поле in_date?

Ivan_kez
102562 10.06.2006 А01
102562 02.11.2006 Ы22
102562 10.06.2006 А01

а вот такой товар должен попасть под выборку.

10.06.2006 более "последняя", чем 02.11.2006??
или опечатка или ??
опечатка, но суть не меняется - не должен ибо по дате последним поставщиком был Ы22
...
Рейтинг: 0 / 0
Помогите составить запрос.
    #35644723
АнатоЛой
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_kez
2.Второй пример. Такой товар должне попасть под выборку 10.07.2006>02.11.2006
Код: plaintext
1.
2.
 102562      10 . 06 . 2006     А01
 102562      02 . 11 . 2006     Ы22
 102562      10 . 07 . 2006     А01

Вы опять невнимательны...
Или же парите нам даты в формате MM.DD.YYYY
...
Рейтинг: 0 / 0
Помогите составить запрос.
    #35644757
АнатоЛой
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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.
28.
29.
SELECT r1.r_kod   -- код товара
     , i1.in_date -- дата накладной
     , i1.in_pkod -- код поставщика
  FROM goods_r r1 -- строки накладных
     , invoice i1 -- накладные
    WHERE i1.in_key = r1.r_key -- соединием
      -- фильтруем
      -- Если накладная от A01
      AND i1.in_pkod = "А01"
      -- и это приход 
      AND i1.in_ttype =  1 
      -- и дата накладной, такая что соответствует
      AND i1.in_date = (
            -- Максимальной дате поставки 
            -- указанного товара
            -- каким угодно поставщиком
            SELECT max(i2.in_date) -- "Максимальной дате поставки "
              FROM goods_r r2
                 , invoice i2
                WHERE i2.in_key = r2.r_key 
                  AND r1.r_kod = r2.k_kod -- "указанного товара"
                  -- далее идёт единственное отличие от кода, приведённого "onstat-"
                  -- след. условие с in_pkod закомментирован, 
                  -- так как подзапрос должен выдавать макс дату поставки "каким угодно поставщиком"
                  -- AND i1.in_pkod = i2.in_pkod  
                  -- и не забыть про приходы
                  AND i2.in_ttype =  1 

          )

Не хотите Вы думать, уважаемый топикстартер...
Купить и вдумчиво на ночь медленно читать "SQL для профессионалов"...
И именно "купить" - чтобы был финансовый мотив для "читать" :)
...
Рейтинг: 0 / 0
Помогите составить запрос.
    #35644848
Ivan_kez
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Большое спасибо.
...
Рейтинг: 0 / 0
Помогите составить запрос.
    #35644914
Ivan_kez
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прошу объяснить мне пожалуйста почему функция max() возвращает не одно значение, а список?
Ведь даже название функции говорит о том что возв. значение должно быть одно.
...
Рейтинг: 0 / 0
Помогите составить запрос.
    #35644937
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_kezБольшое спасибо.

Спасибо это много :)
Что бы отложилось на будущее у Вас в мозгах , а также что бы принести
пользу Informix сообществу предлагаю Вам все, что Вы поняли из этого топика,
оформить в виде FAQ по коррелированным подзапросам.
...
Рейтинг: 0 / 0
Помогите составить запрос.
    #35644940
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_kezПрошу объяснить мне пожалуйста почему функция max() возвращает не одно значение, а список?
Ведь даже название функции говорит о том что возв. значение должно быть одно.

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


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