यह जटिल है। सबसे पहले आपको लगातार दिनांक रिकॉर्ड खोजने होंगे, इसलिए
. के साथ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 स्थान प्राप्त करना होगा, #5 नहीं।
आप पहले 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;