उनकी आईडी और निर्माण टाइमस्टैम्प को छोड़कर पंक्तियां समान हैं। डुप्लीकेट खोजने के लिए, आपको अन्य सभी स्तंभों की तुलना करनी होगी:
दूसरी आईडी (t2.id <> t1.id
के साथ डुप्लीकेट ढूंढकर दोनों पंक्तियों को खोजने वाली क्वेरी ):
select *
from hourly_report_table t1
where exists
(
select *
from hourly_report_table t2
where t2.id <> t1.id
and t2.application = t1.application
and t2.api_date = t1.api_date
and t2.api_hour = t1.api_hour
and ...
);
t2.id < t1.id
की तुलना करके केवल डुप्लिकेट के समूह की एक पंक्ति रखते हुए डिलीट स्टेटमेंट :
delete
from hourly_report_table t1
where exists
(
select *
from hourly_report_table t2
where t2.id < t1.id
and t2.application = t1.application
and t2.api_date = t1.api_date
and t2.api_hour = t1.api_hour
and ...
);
अगर आप इसे किसी खास तारीख और घंटे तक सीमित रखना चाहते हैं, तो ऐसा करें।
where exists (...) and api_date = date '2020-09-27' and api_hour = 17
इस प्रकार आप केवल तालिका के हिस्से के साथ काम कर रहे हैं, लेकिन आपको यह सुनिश्चित करना होगा कि डीबीएमएस इस डेटा को जल्दी से ढूंढ सके (और बार-बार होल टेबल को पढ़ने की आवश्यकता नहीं है)। इसके लिए एक अनुक्रमणिका प्रदान करें:
create index idx1 on hourly_report_table (api_date, api_hour);