Селект для мастера детайла в тригере

Модераторы: kdv, CyberMax

Ответить
Antarey
Сообщения: 18
Зарегистрирован: 26 ноя 2007, 15:30

Селект для мастера детайла в тригере

Сообщение Antarey » 23 июн 2008, 11:28

Есть две таблички -
мастер

Код: Выделить всё

CREATE TABLE GRUPA (
    NAME          CHAR(50),
    BYHCHET       INTEGER,
    PROC          NUMERIC(15,2),
    KOD_GRYPU     INTEGER,
    MASTER_GRYPU  INTEGER,
    MASTER_ID     INTEGER NOT NULL
и детайл
CREATE TABLE PROC_GRYPU (
    DATA          DATE,
    PROC          NUMERIC(15,2),
    MASTER_GRYPU  INTEGER,
    ID            INTEGER NOT NULL
);
завязка MASTER_ID->MASTER_GRYPU
Задача такая - надо выбрать последний процент -PROC- в детайле
и проставить его в мастер
Такой вариант запроса

Код: Выделить всё

select  d.proc,MAX(d.data) Data_Proc from grupa m
left join proc_grypu d on m.master_id=d.master_grypu
where (d.proc is not null)
group by d.proc,d.data
order by data
выдает все записи в связке,а мне надо одина запись процента с максимальной датой
Ето реально или надо создавать цыкл?

belov-evgenii
Сообщения: 52
Зарегистрирован: 28 сен 2007, 10:19

Сообщение belov-evgenii » 23 июн 2008, 12:49

Код: Выделить всё

select first 1 d.proc, d.data
from PROC_GRYPU d
order by 2 desc

Antarey
Сообщения: 18
Зарегистрирован: 26 ноя 2007, 15:30

Сообщение Antarey » 23 июн 2008, 14:11

belov-evgenii
код работает,но как его прикрутить для мастер-детайла

SAMZ
Сообщения: 128
Зарегистрирован: 21 мар 2005, 08:17

Сообщение SAMZ » 23 июн 2008, 15:56

Antarey писал(а):belov-evgenii
код работает,но как его прикрутить для мастер-детайла
Ну как ты и хотел в тригере. Создаешь в тригере таблицы - деталь тригер афтер инсерт апдэйт делете , вычисляешь запрсом последний процент и апдейтишь запись мастера. Все проосто, как точило

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 23 июн 2008, 17:27

и на каждую деталь срабатывает триггер, который считает данные, и пинает мастер-запись.

SAMZ
Сообщения: 128
Зарегистрирован: 21 мар 2005, 08:17

Сообщение SAMZ » 23 июн 2008, 18:03

kdv писал(а):и на каждую деталь срабатывает триггер, который считает данные, и пинает мастер-запись.
Вопрос тут не в пинании мастера, а в том зачем вообще это надо. Есть мастер запись, есть записи детали. Когда понадобится, берешь из деталей то, что необходимо. Но уж если ты горячо желаешь хранить в записи мастере инфу из деталей, то как тут без пинания. Это плата за денормализацию.

Antarey
Сообщения: 18
Зарегистрирован: 26 ноя 2007, 15:30

Сообщение Antarey » 24 июн 2008, 09:28

А моно как-то сварганить просто сам запрос по вышеизложенным требованиям?

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 24 июн 2008, 09:57

А моно как-то сварганить просто сам запрос
нет. проектировать БД надо по человечески.

Antarey
Сообщения: 18
Зарегистрирован: 26 ноя 2007, 15:30

Сообщение Antarey » 24 июн 2008, 10:36

kdv
Я догадывался,просто не хотелось заводить в мастере еще один столбец фактически дублирующий последнюю запись детайла.
Но ничего - не проблема прогнать его через тригер
Пасиба за помощь

Ответить