Ik heb een tabel
Wat ik nu zou willen is dat er per amount de minimum from-date en maximum to-date op 1 regel komen, zolang ze niet worden gescheiden door een andere amount.
Er zijn wel een aantal vaste gegevens:
- Data overlappen elkaar nooit. Een nieuwe from-datum zal dus nooit tussen de from en to van een ander record vallen, noch zal de from-datum samenvallen met een to-datum
- De seq kolom loopt in stijgende lijn, analoog met de tijdslijn. Een latere from-datum betekent dus ook een hogere seq-waarde.
Deze query zal uitgevoerd worden op een Oracle database.
Voorlopig kom ik op
Maar dan wordt er dus eerst gepartitioneerd en dan pas geordend, wat niet echt is wat ik zoek.
Iemand suggesties?
seq | from | to | amount |
---|---|---|---|
1 | 01JAN2011 | 02JAN2011 | 1 |
2 | 03JAN2011 | 04JAN2011 | 2 |
3 | 05JAN2011 | 05JAN2011 | 2 |
4 | 06JAN2011 | 06JAN2011 | 3 |
5 | 07JAN2011 | 08JAN2011 | 2 |
Wat ik nu zou willen is dat er per amount de minimum from-date en maximum to-date op 1 regel komen, zolang ze niet worden gescheiden door een andere amount.
amount | from | to |
---|---|---|
1 | 01JAN2011 | 02JAN2011 |
2 | 03JAN2011 | 05JAN2011 |
3 | 06JAN2011 | 06JAN2011 |
2 | 07JAN2011 | 08JAN2011 |
Er zijn wel een aantal vaste gegevens:
- Data overlappen elkaar nooit. Een nieuwe from-datum zal dus nooit tussen de from en to van een ander record vallen, noch zal de from-datum samenvallen met een to-datum
- De seq kolom loopt in stijgende lijn, analoog met de tijdslijn. Een latere from-datum betekent dus ook een hogere seq-waarde.
Deze query zal uitgevoerd worden op een Oracle database.
Voorlopig kom ik op
SQL:
1
2
3
4
5
6
7
| select amount, min("from") over (partition by amount order by seq), max("to") over (partition by amount order by seq) from ( select 1 seq, to_date('01JAN2011', 'DDMONYYYY') "from", to_date('02JAN2011', 'DDMONYYYY') "to", 1 amount from dual union all select 2 seq, to_date('03JAN2011', 'DDMONYYYY') "from", to_date('04JAN2011', 'DDMONYYYY') "to", 2 amount from dual union all select 3 seq, to_date('05JAN2011', 'DDMONYYYY') "from", to_date('05JAN2011', 'DDMONYYYY') "to", 2 amount from dual union all select 4 seq, to_date('06JAN2011', 'DDMONYYYY') "from", to_date('06JAN2011', 'DDMONYYYY') "to", 3 amount from dual union all select 5 seq, to_date('07JAN2011', 'DDMONYYYY') "from", to_date('08JAN2011', 'DDMONYYYY') "to", 2 amount from dual ) |
Maar dan wordt er dus eerst gepartitioneerd en dan pas geordend, wat niet echt is wat ik zoek.
Iemand suggesties?
When you talk to God it's called prayer, but when God talks to you it's called schizophrenia