Форум: "Базы";
Текущий архив: 2002.11.14;
Скачать: [xml.tar.bz2];
ВнизПроблема с составлением запроса Найти похожие ветки
← →
ShooRoop (2002-10-24 15:02) [0]Здравствуйте, уважаемые мастера.
Вопрос, возможно, не очень сложный, но самостоятельно справиться не получается, прошу помочь.
Опишу ситуацию подробно: имею три таблицы в бд: saldomc - остатки матценностей, katmc - каталог МЦ, katpodr - каталог подразделений (складов, на которых хранятся МЦ).
В таблицу saldomc при любой операции с МЦ (katmc.name) на складе (приняли на склад - приход) или отпустили со склада - расход) добавляется запись с текущим количеством (saldomc.kol) этой МЦ на складе на текущее число (saldomc.dsaldo).
Если в течение текущего дня произошла еще одна операция с той же МЦ, кол-во в этой записи апдейтится.
Как правильно написать запрос для получения текущего количества всех МЦ на складе, т.е. того, что и сколько есть на складе на данный момент, т.е, выбрать по каждой МЦ запись с максимальной датой проведения операции (saldomc.dsaldo). Увы, у меня никак не получается.
Запрос для выборки ВСЕХ записей и примерный результат приведен ниже. Заранее благодарен.
Запрос:
SELECT
KATPODR.NAME, SALDOMC.DSALDO, KATMC.NAME, KATMC.BARKOD, SALDOMC.KOL
FROM
(SALDOMC INNER JOIN KATMC ON
SALDOMC.CMC = KATMC.NREC)
INNER JOIN KATPODR ON
SALDOMC.CPODR = KATPODR.NREC
WHERE
KATPODR.NAME = "СКЛАД ГОТОВОЙ ПРОДУКЦИИ" AND
(KATMC.BARKOD LIKE "84%" OR
KATMC.BARKOD LIKE "81%" OR
KATMC.BARKOD LIKE "94%" OR
KATMC.BARKOD" LIKE "91%")
ORDER BY
KATMC.NAME" ASC,
SALDOMC.DSALDO" ASC
Результат выполнения запроса:
СКЛАД ГОТОВОЙ ПРОДУКЦИИ 22/10/2002 Фанера 84000 10,5
СКЛАД ГОТОВОЙ ПРОДУКЦИИ 23/10/2002 Фанера 84000 11,5
СКЛАД ГОТОВОЙ ПРОДУКЦИИ 24/10/2002 Фанера 84000 8,0
СКЛАД ГОТОВОЙ ПРОДУКЦИИ 22/10/2002 Шпон 81000 1010
СКЛАД ГОТОВОЙ ПРОДУКЦИИ 22/10/2002 Штакетник 91000 220
СКЛАД ГОТОВОЙ ПРОДУКЦИИ 23/10/2002 Штакетник 91000 157
Соответственно, текущие остатки (на сегодня 24/10/2002), будут:
СКЛАД ГОТОВОЙ ПРОДУКЦИИ 24/10/2002 Фанера 84000 8,0
СКЛАД ГОТОВОЙ ПРОДУКЦИИ 22/10/2002 Шпон 81000 1010
СКЛАД ГОТОВОЙ ПРОДУКЦИИ 23/10/2002 Штакетник 91000 157
← →
stone (2002-10-24 15:40) [1]Запрос здесь действительно не сложный. Для получения необходимого тебе результата нужно в строку WHERE добавить
SALDOMC.DSALDO = (select max(DSALDO) from SALDOMC ts where ts.<field>=SALDOMC.<field>)
где field соответсвтует полю по которому можно определить принадлежность даты к конкретной мат.ценности. Причем для надежности работы в таких запросах все названия таблиц лучше подменять псевдонимами
← →
ShooRoop (2002-10-24 16:54) [2]2stone: Огромное человеческое спасибо. Действительно с использованием подзапроса все заработало!
Еще маленький вопрос: в приведенном тобой примере field я заменил на внешний ключ saldomc.cmc, который является ссылкой на katmc.nrec (primary key), это корректно?
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.11.14;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.011 c