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

PostgreSQL में कस्टम समुच्चय फ़ंक्शन

मौजूदा कार्यों के साथ इसे प्राप्त करने के कई तरीके हैं। आप मौजूदा विंडो फ़ंक्शन first_value() और last_value() , DISTINCT . के साथ संयुक्त या DISTINCT ON जुड़ने और सबक्वेरी के बिना इसे प्राप्त करने के लिए:

SELECT DISTINCT ON (userid)
       userid
     , last_value(rank) OVER w  
     - first_value(rank) OVER w AS rank_delta
FROM   rankings
WINDOW w AS (PARTITION BY userid ORDER BY ts
             ROWS BETWEEN UNBOUNDED PRECEDING
             AND  UNBOUNDED FOLLOWING);

विंडो फ़ंक्शंस के लिए कस्टम फ़्रेम नोट करें !

या आप एक सबक्वेरी में बुनियादी समग्र कार्यों का उपयोग कर सकते हैं और जॉइन कर सकते हैं:

SELECT userid, r2.rank - r1.rank AS rank_delta
FROM  (
  SELECT userid
       , min(ts) AS first_ts
       , max(ts) AS last_ts
   FROM  rankings
   GROUP BY 1
   ) sub
JOIN   rankings r1 USING (userid)
JOIN   rankings r2 USING (userid)
WHERE  r1.ts = first_ts
AND    r2.ts = last_ts;

अद्वितीय मानते हुए (userid, rank) , या आपकी आवश्यकताएँ अस्पष्ट होंगी।

SQL Fiddle डेमो।

शिचिनिन नो समुराई


टिप्पणियों में प्रति अनुरोध, केवल प्रति उपयोगकर्ता अंतिम सात पंक्तियों के लिए (या जितने कम पाए जा सकते हैं, अगर कम हैं):

फिर, कई संभावित तरीकों में से एक। लेकिन मेरा मानना ​​है कि यह सबसे छोटा है:

SELECT DISTINCT ON (userid)
       userid
     , first_value(rank) OVER w  
     - last_value(rank)  OVER w AS rank_delta
FROM   rankings
WINDOW w AS (PARTITION BY userid ORDER BY ts DESC
             ROWS BETWEEN CURRENT ROW AND 7 FOLLOWING)
ORDER  BY userid, ts DESC;

उल्टे क्रम को नोट करें। पहली पंक्ति "नवीनतम" प्रविष्टि है। मैं (अधिकतम) 7 पंक्तियों का एक फ्रेम फैलाता हूं और DISTINCT ON के साथ नवीनतम प्रविष्टि के लिए केवल परिणाम चुनता हूं ।

SQL Fiddle डेमो।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 90 दिनों से पुराने टेबल और इंडेक्स को अपने आप ड्रॉप करें

  2. क्या एक पोस्टग्रेज UNIQUE बाधा एक सूचकांक का संकेत देती है?

  3. PgAdmin4 चलाने का प्रयास करने में त्रुटि

  4. sqlalchemy के साथ row_to_json के लिए सिंटैक्स

  5. EXTENSIONS का उपयोग करके स्थानिक डेटाबेस बनाने में त्रुटि