Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Menggeser catatan tertentu ke akhir lari pada tanggal yang sama

Ini rumit. Pertama, Anda harus menemukan catatan tanggal berurutan, jadi dengan

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

Anda akan mengidentifikasi 2014-07-12 sebagai satu kejadian untuk tiga rekaman pertama dan satu lagi untuk rekaman terakhir. Rekor kedua harus mendapatkan posisi #3 dalam hasil Anda, bukan #5.

Anda mencapai ini dengan memberikan catatan berturut-turut kunci grup dengan menggunakan LAG pertama untuk melihat ke catatan sebelumnya, sehingga membuat tanda pada perubahan grup, dan kemudian mengumpulkan tanda-tanda ini.

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. Bagaimana cara membatasi jumlah baris yang dikembalikan oleh kueri Oracle setelah memesan?

  2. Contoh Kondisi Oracle IF

  3. Bagaimana saya bisa melakukan kueri ini di Oracle

  4. subquery - mendapatkan skor tertinggi

  5. Urutkan karakter di varchar2 menurut abjad