इसलिए, मेरे पास बैठकों और उन बैठकों के प्रतिभागियों की एक तालिका है:

 id | callid | participants |    date    
----+--------+--------------+------------
  1 |      1 | {1,2}        | 2020-05-30
  2 |      2 | {1,2}        | 2020-05-01
  3 |      3 | {3,4}        | 2020-03-10

मैंने समीक्षक_आईडी और उनकी बैठक की तारीखों को अलग करने के लिए निम्नलिखित क्वेरी बनाई:

select *
      from (select r.id as reviewer_id, m.date as meeting_date
            from researcher r, meeting m
            where r.id = any (m.participants)
            order by r.id) u;

जो तालिका देता है:

 reviewer_id | meeting_date 
-------------+--------------
           1 | 2020-05-30
           1 | 2020-05-01
           2 | 2020-05-30
           2 | 2020-05-01
           3 | 2020-03-10
           4 | 2020-03-10

अब, यह वह हिस्सा है जहाँ मैं फँस गया हूँ। मैं इसका उपयोग यह निर्धारित करने के लिए कैसे कर सकता हूं कि कोई समीक्षक लगातार दो दिनों में एक से अधिक मीटिंग में भाग ले रहा है?

मैंने PostgreSQL datediff() फ़ंक्शन का उपयोग करने का प्रयास किया है:

select u.reviewer_id, u.meeting_date, date_part('day', u.meeting_date - row_number() over(order by u.meeting_date))
      from (select r.id as reviewer_id, m.date as meeting_date
            from researcher r, meeting m
            where r.id = any (m.participants)
            order by r.id) u;

लेकिन यह कहता रहता है:

operator does not exist: date - bigint

अगर कोई मदद कर सकता है तो इसकी बहुत सराहना की जाएगी।

1
flutterbug98 22 अप्रैल 2020, 09:16

1 उत्तर

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

समस्या यह है कि row_number() एक bigint आउटपुट करता है। एक ऑपरेटर -(date, integer) है, इसलिए आपको केवल bigint को integer पर डालना है:

u.meeting_date - CAST(row_number() over(order by u.meeting_date) AS integer)

मुझे लगता है कि आप इस तरह की एक क्वेरी की तलाश में हैं:

SELECT reviewer_id
FROM (SELECT r.id AS reviewer_id,
             m.date - 1 =
                lag(m.date) OVER (PARTITION BY r.id ORDER BY m.date)
                AS twice_in_a_row
      FROM researcher r
         JOIN meeting m
            ON r.id = ANY (m.participants)) AS q
WHERE twice_in_a_row;
2
Laurenz Albe 22 अप्रैल 2020, 06:38