Dette er kompliceret. Først skal du finde fortløbende datoposter, så med
thedate theid thetype2014-07-12 5001 592014-07-12 5002 1012014-07-12 5003 882014-07-13 5004 102014-07-12 5005du vil identificere 2014-07-12 som én forekomst for de første tre poster og en anden for den sidste post. Den anden rekord skulle få position #3 i dine resultater, ikke #5.
Du opnår dette ved at give fortløbende poster en gruppenøgle ved at bruge første
LAG
at se på den tidligere post, og dermed oprette et flag om gruppeskift og derefter kumulere disse flag.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;