sql >> Databáze >  >> RDS >> Oracle

Průběžný součet podle seskupených záznamů v tabulce

Opravdu potřebujete další stůl?

Potřebná data můžete získat jednoduchým dotazem, který můžete samozřejmě vytvořit jako pohled, pokud chcete, aby vypadal jako tabulka.

Tím získáte data, která hledáte:

select 
    account, bookdate, amount, 
    sum(amount) over (partition by account order by bookdate) running_total
from t
/

Tím se vytvoří pohled, který vám zobrazí data, jako by to byla tabulka:

create or replace view t2
as
select 
    account, bookdate, amount, 
    sum(amount) over (partition by account order by bookdate) running_total 
from t
/

Pokud opravdu potřebujete tabulku, myslíte tím, že ji potřebujete neustále aktualizovat? nebo jen jednorázovka? Je zřejmé, že pokud je to jednorázové, můžete jednoduše "vytvořit tabulku jako výběr" pomocí výše uvedeného dotazu.

Testovací data, která jsem použil, jsou:

create table t(account number, bookdate date, amount number);

insert into t(account, bookdate, amount) values (1, to_date('20080101', 'yyyymmdd'), 100);

insert into t(account, bookdate, amount) values (1, to_date('20080102', 'yyyymmdd'), 101);

insert into t(account, bookdate, amount) values (1, to_date('20080103', 'yyyymmdd'), -200);

insert into t(account, bookdate, amount) values (2, to_date('20080102', 'yyyymmdd'), 200);

commit;

upravit:

zapomněl přidat; uvedli jste, že chcete, aby byla tabulka seřazena - to ve skutečnosti nedává smysl a myslím si, že to opravdu myslíte tím, že jste dotaz/zobrazení chtěli - řazení je výsledkem dotazu, který spustíte, nikoli něčím, co je inherentní tabulky (ignorujte Index Organized Tables a podobně).



  1. vytváření spouštěčů napříč různými databázemi

  2. MySQL UPSERT bez ON DUPLICATE KEY

  3. Jaký je nejlepší přístup k vytváření dynamických dotazů (pomocí PHP+MySQL)?

  4. Při dotazu došlo ke ztrátě připojení k serveru MySQL