sql >> Databasteknik >  >> RDS >> Oracle

Skjut vissa poster till slutet av en körning av samma datum

Det här är komplicerat. Först måste du hitta på varandra följande datumposter, 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 skulle identifiera 2014-07-12 som en händelse för de tre första posterna och en annan för den sista posten. Det andra rekordet måste få position #3 i dina resultat, inte #5.

Du uppnår detta genom att ge på varandra följande poster en gruppnyckel genom att använda första LAG för att undersöka den tidigare posten och på så sätt skapa en flagga om gruppbyte och sedan kumulera dessa flaggor.

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. PostgreSQL 9.3:Hur man infogar UUID med versaler i tabellen

  2. webbinlägg samtidigt

  3. Hur använder jag operatören Postgresql ANY i ett NOT IN-uttalande

  4. mysql_real_escape_string() i .NET Framework