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

एक क्लॉज के साथ एसक्यूएल विंडो फ़ंक्शन?

PostgreSQL 9.5.4 का उपयोग करके गॉर्डन के दृष्टिकोण की कोशिश की, और इसने शिकायत की कि

जिसका अर्थ है lag() . का उपयोग करना FILTER के साथ अनुमति नहीं है। इसलिए मैंने max() . का उपयोग करके गॉर्डन की क्वेरी को संशोधित किया , एक अलग विंडो फ्रेम, और CTE:

WITH subq AS (
  SELECT
    "user", event, time as event_b_time,
    max(time) FILTER (WHERE event = 'A') OVER (
      PARTITION BY "user"
      ORDER BY time
      ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING
    ) AS last_event_a_time
  FROM events
  ORDER BY time
)
SELECT
  "user", event_b_time, last_event_a_time
FROM subq
WHERE event = 'B';

सत्यापित है कि यह PostgreSQL 9.5.4 के साथ काम करता है।

FILTER . के लिए गॉर्डन को धन्यवाद चाल!



  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. DBeaver और PostgreSQL में सीरियल डेटा प्रकार की समस्याएं

  3. अतिव्यापी चर के साथ अलग-अलग तिथियों के साथ कई पंक्तियों को मिलाएं (पहली और अंतिम परिवर्तन तिथियों को पकड़ने के लिए)

  4. कैसे Justify_interval () PostgreSQL में काम करता है

  5. सबक्वेरी का उपयोग करके पोस्टग्रेज में टेबल पंक्तियों को अपडेट करना