मेरे पास 5 कॉलम के साथ नीचे एक हाइव टेबल है

name orderno productcategory amount description
KJFSFKS 1   1   40  D1
KJFSFKS 2   2   50  D2
KJFSFKS 3   2   67  D3
KJFSFKS 4   2   10  D4
KJFSFKS 5   3   2   D5
KJFSFKS 6   3   5   D6
KJFSFKS 7   3   6   D7
KJFSFKS 8   4   8   D8
KJFSFKS 9   5   8   D9
KJFSFKS 10  5   10  D10

समान उत्पाद श्रेणी कोड के आधार पर वांछित आउटपुट, यदि उत्पाद श्रेणी कोड कई पंक्तियों में समान है, तो राशि फ़ील्ड जोड़ें, उच्चतम ऑर्डरनो के आधार पर विवरण चुनें, ऑर्डरनो हमेशा पिकलोवेस्ट, आउटपुट नीचे के रूप में

name    orderno productcategory amount  description
KJFSFKS 1   1   40  D1
KJFSFKS 2   2   127 D4
KJFSFKS 5   3   13  D7
KJFSFKS 8   4   8   D8
KJFSFKS 9   5   18  D10

जैसा कि ऊपर कहा गया है, कुछ फ़ील्ड किसी क्रम में हैं, अन्य अलग-अलग क्रम में हैं

मैंने समूह का उपयोग किया लेकिन योग (राशि) ठीक है, विवरण फ़ील्ड के बारे में क्या है, यह ऑर्डरनो कॉलम पर आधारित है, मेरी आवश्यकता में अन्य कॉलम भी हैं जहां मुझे ऑर्डर नंबर के आधार पर चुनना चाहिए

0
Buccaneers Tampa 26 जुलाई 2017, 16:09

2 जवाब

सबसे बढ़िया उत्तर
select name, orderno,  productcategory,  amount,   description 
from 
(
select name, orderno, productcategory, 
       sum(amount) over(partition by name, productcategory) amount, 
       first_value(description) over(partition by name, productcategory order by orderno desc) description,
       row_number() over (partition by name, productcategory order by orderno) rn
from  your_table
)s where rn=1; --pick lowest orderno 

OK
KJFSFKS 1       1       40      D1
KJFSFKS 2       2       127     D4
KJFSFKS 5       3       13      D7
KJFSFKS 8       4       8       D8
KJFSFKS 9       5       18      D10
Time taken: 12.492 seconds, Fetched: 5 row(s)
0
leftjoin 26 जुलाई 2017, 23:38
select      name
           ,min(orderno)    as orderno
           ,productcategory
           ,sum(amount)     as amount
           ,max(named_struct('orderno',orderno,'description',description)).description

from        mytable

group by    name
           ,productcategory
;
0
David דודו Markovitz 27 जुलाई 2017, 05:35