これは複雑です。まず、連続する日付レコードを見つける必要があるため、
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つのレコードの1つのオカレンスとして識別し、最後のレコードの別のオカレンスとして識別します。 2番目のレコードは、結果で5位ではなく3位になる必要があります。
これは、最初の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;