2015-07-29 3 views
5

मेरी आरओआर परियोजना में, 10 गुणों वाला एक ग्राहक मॉडल है। अब मैं उन ग्राहकों को ढूंढना चाहता हूं जिनमें कम-से-कम तीन सामान्य विशेषताएं हों। मैं इस क्वेरी को कुशलतापूर्वक कैसे बना सकता हूं?किसी भी 3 सामान्य विशेषताओं के लिए डुप्लिकेट रिकॉर्ड खोजें

Customer.select([:first_name,:last_name,:language]). 
     group(:first_name,:last_name,:language).having("count(*) > 1") 

लेकिन इस समाधान की जाँच करने के भी कई संयोजन की आवश्यकता:

शायद यह एक समाधान है। बेहतर समाधान के साथ मदद करें।

धन्यवाद! अग्रिम रूप से।

+0

नहीं, यह एक अलग सवाल है। उपरोक्त वह जगह है जहां हम वास्तव में इन दो दिए गए कॉलम मैच को जानते हैं। यह सवाल पूछता है कि तीन संभावित स्तंभों में से कोई भी दो –

+0

@Taryn East से मेल खाता है: दुर्भाग्य से यह समाधान मेरी समस्या का समाधान नहीं करता है। क्योंकि मैं उन ग्राहकों की अपेक्षा करता हूं जिनके पास कम-से-कम तीन सामान्य गुण हैं। वैसे भी, धन्यवाद, आपकी टिप्पणी के लिए। –

+0

मैंने समाधान का सुझाव नहीं दिया है। मैंने बंद करने के खिलाफ मतदान किया और वोटिंग-टू-क्लोज-ए-डुप्लिकेट के लिए मेरा कारण नहीं दिया। मेरी टिप्पणी उस लड़के के लिए थी जिसने डुप्लिकेट के रूप में बंद करने के लिए मतदान किया था, न कि आपके लिए - क्षमा करें - मेरे पास कोई समाधान नहीं है। –

उत्तर

0

यह सबसे अच्छा है कि मैं अब तक आ सकता हूं। एक एसक्यूएल समाधान भी नहीं।

# Arrange a 3-items combination of columns, removed id and timestamps 
triplets = Customer.column_names.reject {|column| column == "id" || column == "created_at" || column == "updated_at"}.combination(3).to_a 

#Group All records by same item values for each 3-items combination 
all = Customer.all 
res = triplets.map do|t| 
    all.to_a.group_by {|c| [ {t[0] => c.send(t[0].to_sym)}, { t[1] => c.send(t[1].to_sym) }, {t[2] => c.send(t[2].to_sym)} ]} 
end 
# removed combinations with only 1 record 
final_result = res.map {|h1| h1.reject { |k, v| v.count <= 1}} 

# There you have customer with 3 attributes common combinations 
+0

आपके उत्तर के लिए बहुत बहुत धन्यवाद ... –

संबंधित मुद्दे