मेरे पास व्यक्ति का नाम दिखाने के लिए नीचे SQL क्वेरी है, दिनांक सीमा के बीच गणना करें। यह नीचे के रूप में परिणाम दिखाता है:

DAY           NAME           count_person 
04-MAY-2020   person_1       220
06-MAY-2020   person_1       30

मैं चाहता हूं कि मेरे परिणाम नीचे दिखाए जाएं यदि उस तिथि के लिए नाम गुम है

DAY           NAME           count_person 
01-MAY-2020   person_1       0
02-MAY-2020   person_1       0
03-MAY-2020   person_1       220
04-MAY-2020   person_1       30
'
'
'
31-MAY-2020   person_1       0

नीचे मेरी एसक्यूएल क्वेरी है:

SELECT  TRUNC(AN.DATE_CREATED) DAY,  AN.NAME, COUNT(AN.NAME) count_person 
FROM 
    person AN 
WHERE 
    TRUNC(AN.DATE_CREATED) >= '01-MAY-20' 
    AND TRUNC(AN.DATE_CREATED) <= '31-MAY-20' 
    GROUP BY TRUNC(AN.DATE_CREATED), AN.NAME

समाधान के लिए धन्यवाद, मेरे पास मेरे आउटपुट के लिए एक संशोधन है आउटपुट नीचे जैसा दिखाया जाना है:

DAY           NAME           count_person 
01-MAY-2020   person_1       0
02-MAY-2020   person_1       0
03-MAY-2020   person_1       220
04-MAY-2020   person_1       30
05-MAY-2020   person_1       30
'
'
15-MAY-2020   person_1       12
16-MAY-2020   person_1       12
'
'
31-MAY-2020   person_1       30


अर्थात यदि किसी विशेष तिथि पर मेरे पास शून्य गणना है तो उसे पिछली तिथि से गिनती लेनी चाहिए और यदि यह शून्य नहीं है तो इसे छोड़ दें? मैंने लीड का उपयोग करने की कोशिश की लेकिन तर्क पिछले मान को लेने के लिए काम नहीं करता है।

0
shanky 7 जुलाई 2021, 20:42

1 उत्तर

विचार पंक्तियों को उत्पन्न करने के लिए cross join और मौजूदा डेटा लाने के लिए left join का उपयोग करना है। आपको एक गिनती उत्पन्न करने की भी आवश्यकता है, इसलिए एकत्रीकरण भी शामिल है।

@ TheImpaler का जवाब सही है। . . एक व्यक्ति के लिए। लेकिन सभी लोगों के लिए:

with days (d) as (
      select date '2020-05-01' from dual
      union all
      select d + interval '1' day
      from days
      where d < date '2020-05-31'
     )
select d.day, p.name, count(p.name) as count_person 
from days d cross join
     (select distinct p.name from person) n left join 
     person p
     on trunc(p.date_created) = d.d and
        p.name = n.name
group by d.day, p.name
order by p.name, d.day;
1
Gordon Linoff 7 जुलाई 2021, 18:15