sql >> Database >  >> RDS >> Oracle

Lopend totaal op gegroepeerde records in tabel

Heb je de extra tafel echt nodig?

U kunt de benodigde gegevens verkrijgen met een eenvoudige query, die u uiteraard als een weergave kunt maken als u wilt dat deze als een tabel wordt weergegeven.

Hiermee krijgt u de gegevens die u zoekt:

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

Hiermee wordt een weergave gemaakt waarin u de gegevens kunt zien alsof het een tabel is:

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

Als je de tabel echt nodig hebt, bedoel je dan dat je hem constant moet bijwerken? of gewoon eenmalig? Het is duidelijk dat als het eenmalig is, je gewoon "tabel als selectie kunt maken" met behulp van de bovenstaande vraag.

Testgegevens die ik heb gebruikt zijn:

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;

bewerken:

vergeten toe te voegen; je hebt aangegeven dat je wilde dat de tabel werd geordend - dit is niet echt logisch, en ik denk dat je echt bedoelt dat je de query / weergave wilde - bestellen is een resultaat van de query die je uitvoert, niet iets dat inherent is aan de tafel (waarbij Index Georganiseerde Tabellen en dergelijke worden genegeerd).



  1. Hoe FROM_DAYS() werkt in MariaDB

  2. Hoe de grootte van de SQL Server-tabel te verkleinen die is gegroeid door een wijziging van het gegevenstype

  3. Sessievariabelen vs. Mysql-tabel

  4. Hoe combineer je GROUP BY, ORDER BY en HAVING