ध्वनि विंडो फ़ंक्शन के लिए एक एप्लिकेशन की तरह . लेकिन, दुख की बात है कि ऐसा नहीं है। विंडो फ़्रेम केवल पंक्तियों की संख्या पर आधारित हो सकते हैं, वास्तविक स्तंभ मानों पर नहीं।
LEFT JOIN
के साथ एक सरल क्वेरी काम कर सकते हैं:
SELECT t0.order_id
, count(t1.time_created) AS count_within_3_sec
FROM tbl t0
LEFT JOIN tbl t1 ON t1.time_created BETWEEN t0.time_created - interval '3 sec'
AND t0.time_created
GROUP BY 1
ORDER BY 1;
db<>fiddle यहां
time
के साथ काम नहीं करता आपके न्यूनतम डेमो की तरह, क्योंकि यह चारों ओर लपेटता नहीं है। मुझे लगता है कि यह मान लेना उचित है timestamp
या timestamptz
।
चूंकि आप प्रत्येक पंक्ति को गिनती में शामिल करते हैं, एक INNER JOIN
भी काम करेगा। (LEFT JOIN
संभावित NULL मानों के सामने अभी भी अधिक विश्वसनीय है।)
या LATERAL
का उपयोग करें सबक्वेरी और आपको बाहरी क्वेरी स्तर पर एकत्रित करने की आवश्यकता नहीं है:
SELECT t0.order_id
, t1.count_within_3_sec
FROM tbl t0
LEFT JOIN LATERAL (
SELECT count(*) AS count_within_3_sec
FROM tbl t1
WHERE t1.time_created BETWEEN t0.time_created - interval '3 sec'
AND t0.time_created
) t1 ON true
ORDER BY 1;
संबंधित:
बड़ी तालिकाओं और समय सीमा में कई पंक्तियों के लिए, एक प्रक्रियात्मक समाधान जो तालिका के माध्यम से एक बार चलता है बेहतर प्रदर्शन करेंगे। पसंद:
- विंडो फ़ंक्शंस या सामान्य तालिका अभिव्यक्तियाँ:पिछली पंक्तियों को सीमा के भीतर गिनें
- टूटे हुए PL/रूबी के विकल्प:वेयरहाउस जर्नल टेबल में कनवर्ट करें
- ग्रुप बाय और एग्रीगेट अनुक्रमिक संख्यात्मक मान