Điều này thật phức tạp. Trước tiên, bạn phải tìm các bản ghi ngày tháng liên tiếp, vì vậy với
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
bạn sẽ xác định 2014-07-12 là một lần xuất hiện cho ba bản ghi đầu tiên và một lần khác cho bản ghi cuối cùng. Bản ghi thứ hai sẽ phải có được vị trí số 3 trong kết quả của bạn, không phải vị trí số 5.
Bạn đạt được điều này bằng cách cấp cho các bản ghi liên tiếp một khóa nhóm bằng cách sử dụng LAG
đầu tiên để xem xét bản ghi trước đó, do đó tạo cờ khi thay đổi nhóm và sau đó tích lũy các cờ này.
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;