Oracle
 sql >> база данни >  >> RDS >> Oracle

Плъзгане на определени записи до края на цикъл от същата дата

Това е сложно. Първо трябва да намерите последователни записи на дати, така че с

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

бихте идентифицирали 2014-07-12 като едно събитие за първите три записа и друго за последния запис. Вторият запис трябва да получи позиция №3 във вашите резултати, а не №5.

Постигате това, като давате на последователни записи групов ключ, като използвате първия LAG за да разгледате предишния запис, като по този начин създадете флаг при промяна на групата и след това кумулирате тези флагове.

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle sqlldr обработва ли няколко INFILE паралелно

  2. Oracle, свържете се чрез rownum

  3. Entity Framework и низ като NCLOB на oracle Db

  4. JCombobox не се показва

  5. Изисква ли се ODP.NET за Oracle 11g Client?