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

Glidning af visse poster til slutningen af ​​en kørsel af samme dato

Dette er kompliceret. Først skal du finde fortløbende datoposter, så med

thedate theid thetype2014-07-12 5001 592014-07-12 5002 1012014-07-12 5003 882014-07-13 5004 102014-07-12 5005 

du vil identificere 2014-07-12 som én forekomst for de første tre poster og en anden for den sidste post. Den anden rekord skulle få position #3 i dine resultater, ikke #5.

Du opnår dette ved at give fortløbende poster en gruppenøgle ved at bruge første LAG at se på den tidligere post, og dermed oprette et flag om gruppeskift og derefter kumulere disse 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;
 


  1. Union, der forårsager et ORA-01790:-udtryk, skal have samme datatype som det tilsvarende udtryk

  2. Forespørger understrenge mod en liste over værdier

  3. Tjek, om brugeren allerede er logget på asp.net-webstedet

  4. Hurtigt og bedste trick til SQL Server MDF-filgendannelse