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;