मेरे पास SQLite डेटाबेस में एक समय श्रृंखला है और इसका विश्लेषण करना चाहते हैं।

समय श्रृंखला के महत्वपूर्ण भाग में अलग-अलग लेकिन अद्वितीय स्ट्रिंग मानों वाला कॉलम नहीं होता है। मैं ऐसा कुछ करना चाहता हूं:

Value  concat  countValue

A      A       1
A      A,A     1
B      A,A,B   1
B      A,B,B   2
B      B,B,B   3
C      B,B,C   1
B      B,C,B   2

मुझे नहीं पता कि गिनती वैल्यू कॉलम कैसे प्राप्त करें। इसे विभाजन के सभी मानों को वर्तमान पंक्तियों के मान के बराबर गिनना चाहिए।

मैंने यह कोशिश की लेकिन यह सिर्फ विभाजन में सभी मानों की गणना करता है, न कि इस पंक्तियों के बराबर मान मान।

SELECT 
    Value,
    group_concat(Value) OVER wind AS concat,
    Sum(Case When Value Like Value Then 1 Else 0 End) OVER wind AS countValue
FROM TimeSeries
WINDOW
    wind AS (ORDER BY date ROWS BETWEEN 2 PRECEDING AND CURRENT ROW)
ORDER BY 
    date
;

क्वेरी भी इन कारकों द्वारा सीमित है:

  1. क्वेरी को किसी भी अद्वितीय मान के साथ काम करना चाहिए
  2. क्वेरी को किसी भी विभाजन आकार के साथ काम करना चाहिए (एन पूर्ववर्ती और वर्तमान पंक्ति के बीच की पंक्तियाँ)

क्या यह केवल SQL का उपयोग करके भी संभव है?

0
Mini Cooper 246 25 अक्टूबर 2020, 17:13

1 उत्तर

सबसे बढ़िया उत्तर

स्ट्रिंग फ़ंक्शंस का उपयोग करके यहां एक दृष्टिकोण दिया गया है:

select 
    value,
    group_concat(value) over wind as concat,
    (
        length(group_concat(value) over wind) - length(replace(group_concat(value) over wind, value, ''))
    ) / length(value) cnt_value
from timeseries
window wind as (order by date rows between 2 preceding and current row)
order by date;
0
GMB 25 अक्टूबर 2020, 14:25