2 सवाल: एक तालिका में पंक्तियाँ लौटाएँ जहाँ कई स्तंभ बराबर हों

पर बनाया गया सवाल Sun, Mar 17, 2019 12:00 AM

मेरे पास नीचे दी गई तालिका है:

 टेबल

मैं Row ID (जोड़े में) लौटने के लिए कुछ SQL लिखने की कोशिश कर रहा हूँ जहाँ नीचे दी गई दो पंक्तियों के लिए सही है:

  • Item
  • बराबर है
  • Name
  • बराबर है
  • Measure
  • बराबर है
  • Dates ओवरलैप

अब तक मैंने जो करने की कोशिश की है वह है SELECT, WHERE & GROUP BY Row ID पर वापस लौटने के लिए (मुझे पता है कि इस समय इसकी कार्यक्षमता में कमी है):

SELECT rowid FROM techtest GROUP BY Customer, Product, Measure;

हालांकि यह जोड़े के बजाय व्यक्तिगत Row ID देता है। उदाहरण के लिए मुझे रिटर्न के रूप में क्या मिलने की उम्मीद है 06003509911001001350350 1 & 2 एक साथ, क्योंकि वे सूचीबद्ध सभी मानदंडों को पूरा करते हैं।

मैं उन पंक्तियों की जोड़ी की सूची वापस करने के बारे में कैसे लिखूंगा, जो सूचीबद्ध मानदंडों को पूरा करती हैं?

    
1
  1. आपका प्रश्न मुझे भ्रमित करता है। आप 1, 2 और 3 को एक साथ चुनना चाहते हैं क्योंकि आइटम, नाम और माप समान है और तिथियां ओवरलैप हैं, लेकिन आप उन्हें कैसे वापस करने की उम्मीद करते हैं? 4, 5 और 6 भी आपके मानदंडों को पूरा करते हैं। क्या आप १ कॉलम के साथ २ पंक्तियाँ चाहते हैं जो क्रमशः ०६००३० ९९ ११११००१०१०५०६२ और ०६०० ९९९ ११११११००१०५०६२ कह रहे हैं? आप उन्हें कैसे समूहीकृत करना चाहते हैं?
    2019-03-17 00: 27: 06Z
    2 उत्तर                              2                         

    अपेक्षित परिणाम उत्पन्न करने के लिए एक समाधान तालिका को स्व-शामिल करना होगा:

    Row ID

    तर्क 06003509911001001350 में 1, 2, 3 की शर्तों में निहित है:

    • 4, 5, 6 दिनांक सीमा ओवरलैप स्थिति का प्रतिनिधित्व करता है (अधिक जानकारी के लिए यह SO पोस्ट देखें) - आपके RDBMS के आधार पर, अधिक सीधे-आगे के समाधान उपलब्ध हो सकते हैं
    • SELECT t1.row_id, t2.row_id
      FROM mytable t1
      INNER JOIN mytable t2 
          ON  t1.item    = t2.item
          AND t1.name    = t2.name
          AND t1.measure = t2.measure
          AND t1.begin_date  <= t2.expiry_date 
          AND t1.expiry_date >= t2.begin_date
          AND t1.row_id  < t2.row_id
      
      परिणामों में डुप्लिकेट से बचा जाता है जैसे (ON, JOIN)
    2
    2019-03-17 01: 02: 57Z

    निश्चित नहीं कि यदि सही तरीके से समझा जाए, लेकिन यह दर्शाता है कि आप कैसे आगे बढ़ सकते हैं:

    t1.begin_date <= t2.expiry_date AND t1.expiry_date >= t2.begin_date     
    0
    2019-03-17 00: 30: 52Z
    t1.row_id < t2.row_id
स्रोत रखा गया यहाँ