Суть вопроса.
Есть набор данных товары где каждая запись уникальна и цены с начальным значением и их приращением
для получения списка товаров с актуальной ценой на определенный момент надо проссумировать все значения их цен с ограничением по дате и вывести это сосписком товаров....
ну примерно так:
Код: Выделить всё
SELECT t.tv_ndog, t.tv_ddog, t.tv_name, t.TV_STATE, ...,
SUM(p.pr_pprod), SUM(p.pr_pkom)
FROM Tovar t left join Price p on (t.tv_ndog = p.pr_ndog)
WHERE (p.pr_d_op < '9.8.2006')
GROUP BY t.tv_ndog, t.tv_ddog, t.tv_name, t.TV_STATE, ...
некузявоть сего действия мне видиться в том, что группировать то по сути тут и не нужно, ибо запись о товаре существует только в одном экземпляре... по сути надо бы просумировать цену и только потом приклеивать к товару
например так:
Код: Выделить всё
SELECT t.*, (select SUM(p.pr_pprod) from Price p where (t.tv_ndog = p.pr_ndog) )
FROM Tovar t
Вопрос тут чисто философический
не "как мне сделать, ой помогите"
а как бы это сделать красиво и правильно...
ибо включать в группировку все поля из таблицы, а это придеться делать всегда, когда нужен списот товаров с ценами меня как-то смущает... или это и есть "правильно"?
Подозреваю, что вся моя проблева вообще от того, что не правильно выбрана модель данных. Поэтому ниже поясню зачем так было придумано, ибо поменять сейчас еще не поздно.
Это вообще у меня проект для саморазвития...
Эта задача из комиссионной торговли.
есть таблица товаров (договоров комиссии) и таблица цен
Код: Выделить всё
TABLE TOVAR
TV_NDOG INTEGER NOT NULL, PK
TV_DDOG DATE,
TV_NAME VARCHAR(250) COLLATE PXW_CYRL,
TV_STATE CHAR(1)
и т.д.
TABLE PRICE
PR_NDOG INTEGER NOT NULL, PK
PR_D_OP DATE NOT NULL, PK
PR_PPROD NUMERIC(15,2)
PR_PKOM NUMERIC(15,2)
231 01.08.2006 Картина и т.д...
а в PRICE добавиться запись с начальными ценами
231 01.08.2006 200.00 100.00
потом может быть переоценка или уценка... т.е. дальше в прайс пишем только дельту изменения цены суказанием даты операции (в обин день может быть только одна переоценка, ну это понятно)
например 231 03.08.2006 -50.00 10.00 (первую цену уменьшили на 50 а вторую увеличили на 10)
что я хотел этим цырком сделать?
я просто не люблю системы, где, например цены, хранятся в конечном виде если есть операции их изменения. Тогда сложно получить состояние на прошлое число...
а если хранить приращение, то просто суммируем это поле с ограничением по дате... и в людой момент запрос даст тот же результат, стоклько бы не совершалось изменений после этого момента.
но вот группировка по всем полям меня смущает сильно...
может я что-то перемудрил и это все намного проще организовать можно?
если комуто интересно и есть предложения по другому организовать данные - готов обсуждать. если для этого надо заводить отдельный топик, сделаю, мне не сложно.
А рассписал так все подробно ибо очень часто на форуме видел обсуждения болгие, "как мне сделать чтоб тут было вот это" в конце которых выясняется что "это" делать ненадо и даже нельзя потому что изначаьно неправильный подход...