मुझे प्रत्येक ग्राहक के लिए नवीनतम खरीदारी को क्वेरी करने की आवश्यकता है।

खरीद:

purchase_id | date
------------+-----------
 1          | 2020-03-10
 2          | 2020-03-15
 3          | 2020-03-14
 4          | 2020-03-12

खरीद ग्राहक तालिका में शामिल हों:

purchase_id | customer_id
------------+------------
 1          | 3
 2          | 7
 3          | 5
 4          | 5

इस प्रश्न के साथ मैं दिनांक और ग्राहक आईडी का संयोजन प्राप्त करने में सक्षम हूं। लेकिन मुझे खरीद आईडी भी चाहिए।

SELECT
MAX(p.date), c.customer_id
FROM purchases AS p
JOIN purchase_customer AS c
ON p.purchase_id = c.purchase_id
GROUP BY c.customer_id

मुझे पता है कि इस तरह की समस्या के लिए अधिकांश डेटाबेस में विशिष्ट कार्य होते हैं, लेकिन मैं एक आरडीबीएमएस स्वतंत्र समाधान चाहता हूं।

0
Imperative 27 मार्च 2020, 00:05

1 उत्तर

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

एक सामान्य "मानक" तरीका row_number() का उपयोग करता है:

SELECT pc.*
FROM (SELECT p.*, c.customer_id,
             ROW_NUMBER() OVER (PARTITION BY c.customer_id ORDER BY p.date DESC) as seqnum
      FROM purchases p JOIN
           purchase_customer c
           ON p.purchase_id = c.purchase_id
     ) pc
WHERE seqnum = 1;
1
Gordon Linoff 26 मार्च 2020, 21:08