Det här är komplicerat. Först måste du hitta på varandra följande datumposter, så med
thedate theid thetype2014-07-12 5001 592014-07-12 5002 1012014-07-12 5003 882014-07-13 5004 102014-07-12 5005du skulle identifiera 2014-07-12 som en händelse för de tre första posterna och en annan för den sista posten. Det andra rekordet måste få position #3 i dina resultat, inte #5.
Du uppnår detta genom att ge på varandra följande poster en gruppnyckel genom att använda första
LAG
för att undersöka den tidigare posten och på så sätt skapa en flagga om gruppbyte och sedan kumulera dessa flaggor.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;