Oracle
 sql >> Database >  >> RDS >> Oracle

Far scorrere determinati record alla fine di un'esecuzione della stessa data

Questo è complicato. Per prima cosa devi trovare record di date consecutive, quindi con

thedate     theid  thetype
2014-07-12   5001       59
2014-07-12   5002      101
2014-07-12   5003       88
2014-07-13   5004       10
2014-07-12   5005       60

identificheresti 2014-07-12 come un'occorrenza per i primi tre record e un'altra per l'ultimo record. Il secondo record dovrebbe ottenere la posizione n. 3 nei risultati, non n. 5.

Puoi ottenere ciò assegnando ai record consecutivi una chiave di gruppo utilizzando il primo LAG per esaminare il record precedente, creando così un flag al cambio di gruppo e quindi cumulando questi flag.

select thedate, theid, thetype
from
(
  select 
    thedate, theid, thetype,
    sum(new_group) over (order by theid) as group_key
  from
  (
    select
      thedate, theid, thetype,
      case when lag(thedate) over (order by theid) = thedate then 0 else 1 as new_group
    from mytable
  ) marked
) grouped
order by 
  group_key,
  case when thetype = 101 then 1 else 0 end,
  theid;