मैं अलग पहचान के लिए एक विभाजन के रूप में हर हफ्ते के साथ प्रति दिन उपयोगकर्ता आईडी लॉग की एक अलग गिनती प्राप्त करने की कोशिश कर रहा हूँ। जैसे यदि एक उपयोगकर्ता सप्ताह 1 के शुक्रवार/शनिवार को और सप्ताह 2 के सोमवार/शुक्रवार को लॉग इन करता है, तो मैं एक कॉलम रखना चाहता हूं जो शुक्रवार में 1 और शनिवार सप्ताह 1 में 0 और सोमवार में 1 और शुक्रवार सप्ताह 2 में गिनता है।
अगर मेरे पास निम्न डेटा है:
मुझे इस परिणाम की उम्मीद है:
मैं प्रेस्टो के साथ काम कर रहा हूं, और घने_रैंक() समाधानों के साथ प्रयास किया है लेकिन इसका कोई फायदा नहीं हुआ है।
1 उत्तर
आप विंडो फ़ंक्शंस और एकत्रीकरण का उपयोग कर सकते हैं:
select date, iso_week, sum(case when rn = 1 then 1 else 0 end) cnt
from (
select t.*,
row_number() over(partition by userid, iso_week order by date) min_date
from mytable t
) t
group by date, iso_week
बेहतर अभी तक, मानक where
क्लॉज को एग्रीगेट करने के लिए इस्तेमाल करना बेहतर है फ़ंक्शंस, जो प्रेस्टो का समर्थन करता है:
select date, iso_week, count(*) filter(where rn = 1) cnt
from (
select t.*,
row_number() over(partition by userid, iso_week order by date) min_date
from mytable t
) t
group by date, iso_week
संबंधित सवाल
नए सवाल
sql
संरचित क्वेरी भाषा (एसक्यूएल) डेटाबेस को क्वेरी करने के लिए एक भाषा है। प्रश्नों में कोड उदाहरण, तालिका संरचना, नमूना डेटा और DBMS कार्यान्वयन के लिए एक टैग (जैसे MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2, आदि) का उपयोग किया जाना चाहिए। यदि आपका प्रश्न केवल एक विशिष्ट DBMS (विशिष्ट एक्सटेंशन / सुविधाओं का उपयोग करता है) से संबंधित है, तो इसके बजाय उस DBMS के टैग का उपयोग करें। एसक्यूएल के साथ टैग किए गए सवालों के जवाब में आईएसओ / आईईसी मानक एसक्यूएल का उपयोग करना चाहिए।