PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

समय अंतराल के साथ पंक्तियों की रोलिंग गिनती

ध्वनि विंडो फ़ंक्शन के लिए एक एप्लिकेशन की तरह . लेकिन, दुख की बात है कि ऐसा नहीं है। विंडो फ़्रेम केवल पंक्तियों की संख्या पर आधारित हो सकते हैं, वास्तविक स्तंभ मानों पर नहीं।

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;

संबंधित:

बड़ी तालिकाओं और समय सीमा में कई पंक्तियों के लिए, एक प्रक्रियात्मक समाधान जो तालिका के माध्यम से एक बार चलता है बेहतर प्रदर्शन करेंगे। पसंद:




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. पोस्टग्रेस्क्ल में महीने और साल के अनुसार समूह क्वेरी परिणाम

  2. पोस्टग्रेस्क्ल का उपयोग करके ग्रहण में विराम बिंदु

  3. SET client_min_messages to WARNING के बावजूद INFO आउटपुट ठीक पहले

  4. pgAdmin - डीबी कनेक्शन परिभाषा साझा करना

  5. पोस्टग्रेज :jdbc . के लिए कोई उपयुक्त ड्राइवर नहीं मिला