मेरे पास टेबल orders है जिसमें निम्नलिखित फ़ील्ड हैं id, updated_at, self_ref_id, और अन्य जो गिनती नहीं करते हैं।
कॉलम self_ref_id एक सेल्फ रेफरेंस टू ऑर्डर है, एक ऑर्डर में कई बच्चे हो सकते हैं, एक बच्चे के दूसरे बच्चे नहीं होंगे।
मैं updated_at desc द्वारा सभी प्रविष्टियों को ऑर्डर करने का प्रयास कर रहा हूं, लेकिन हर माता-पिता के आदेश के बाद, मैं उनके बच्चों को updated_at द्वारा ऑर्डर करना चाहता हूं, भले ही बच्चा updated_at अगले माता-पिता से कम है updated_at

मैंने उन्हें updated_at द्वारा ऑर्डर करने की कोशिश की और उन्हें id और self_ref_id के आधार पर समूहित किया।

मैं गोर्म के साथ जाने का उपयोग कर रहा हूं, अगर यह मायने रखता है, लेकिन मुझे यह संकेत चाहिए कि यह प्रश्न कैसे बनाया जाए। मैं एक सबक्वायरी के साथ भी कोशिश कर रहा था, लेकिन मैं सफल नहीं हुआ। मुझे डुप्लिकेट फ़ील्ड की आवश्यकता नहीं है, मैं बस उन्हें ऑर्डर करना चाहता हूं।

मैं उन्हें कैसे चाहता हूं, उन्हें क्रमबद्ध करने के लिए कुछ पोस्ट-प्रोसेसिंग कर सकता हूं, लेकिन मैं उत्सुक हूं अगर मैं इसे किसी प्रश्न से कर सकता हूं।

2
jalanga 26 मार्च 2020, 20:19

1 उत्तर

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

आप इसे स्वयं-जुड़ने के साथ कर सकते हैं:

select o.*
from orders o
left join orders p on p.id = o.self_ref_id
order by 
    coalesce(p.updated_at, o.updated_at), 
    p.id is not null,
    o.updated_at

left join मूल पंक्ति, यदि कोई हो, को जोड़ता है। फिर, हम मूल तिथि (या वर्तमान तिथि यदि कोई माता-पिता नहीं है) द्वारा आदेश देते हैं; दूसरा आदेश मानदंड (p.id is not null) "पैरेंट" पंक्ति को प्राथमिकता देता है, और अंतिम मानदंड बच्चों की पंक्तियों को तिथि के अनुसार क्रमित करता है।

1
GMB 26 मार्च 2020, 17:25