2 टेबल टेबल 1 और टेबल 2 हैं

table1 data

table2 data

पहला स्तंभ, विदेशी_आईडी दोनों तालिकाओं के बीच का सामान्य स्तंभ है। सभी संबंधित कॉलम के डेटा प्रकार समान हैं।


अब, हमें टाइमस्टैम्प कॉलम के आधार पर नवीनतम रिकॉर्ड खोजने की जरूरत है, प्रत्येक विदेशी_आईडी के लिए दोनों तालिकाओं से, उदाहरण के लिए नीचे, एक अतिरिक्त कॉलम from_table, जो दिखाता है कि यह पंक्ति किस तालिका से चुनी गई है . result table

एक तरीका जिसके बारे में मैं सोच सकता हूं वह है

फिर दोनों तालिकाओं को मिलाएं, प्रत्येक विदेशी_आईडी कॉलम के लिए नवीनतम खोजें

ऐसा करने का कोई भी बेहतर तरीका क्योंकि दोनों तालिकाओं में 5000+ पंक्तियाँ हो सकती हैं।

0
Abhishek 14 जून 2017, 10:29
क्या प्रत्येक विदेशी_आईडी प्रत्येक तालिका में एक से अधिक बार दिखाई देती है?
 – 
ysth
14 जून 2017, 11:00
हां, तालिका में प्रत्येक विदेशी_आईडी के लिए एकाधिक पंक्तियां हो सकती हैं
 – 
abhi
14 जून 2017, 11:57

2 जवाब

ये कोशिश करें:

SELECT
  t1.foreign_id,
  MAX(t1.timestamp) max_time_table1,
  MAX(t2.timestamp) max_time_table2
FROM *table1* t1
LEFT JOIN *table2* t2 USING (foreign_id)
GROUP BY foreign_id; 

नोट: यदि रिकॉर्ड की संख्या काफी बड़ी है, तो यह थोड़ा धीमा हो सकता है।

हालाँकि आप इसका उपयोग भी कर सकते हैं:

SELECT a.foreign_id, 
IF(a.max_time_table1 > a.max_time_table2, a.max_time_table1, a.max_time_table2) latest_update
FROM(  
 SELECT
 t1.foreign_id,
 SUBSTRING_INDEX(GROUP_CONCAT(t1.timestamp ORDER BY t1.id DESC),',',1)    max_time_table1,
SUBSTRING_INDEX(GROUP_CONCAT(t2.timestamp ORDER BY t2.id DESC),',',1) max_time_table2
FROM *table1* t1
LEFT JOIN *table2* t2 USING (foreign_id)
GROUP BY foreign_id) a; 

सुनिश्चित करें कि दोनों तालिकाओं में आईडी कॉलम auto_increment हैं।

1
Dixon 20 जून 2017, 19:50
पहले उत्तर के अनुसार, हमें max_time_table1 और max_time_table2 नाम के 2 कॉलम मिलेंगे और जब भी जॉइन कंडीशन के अनुसार मैच होगा तो दोनों कॉलम में वैल्यू होगी। लेकिन मुझे परिणाम की आवश्यकता है कि प्रत्येक विदेशी आईडी के लिए 1 पंक्ति प्राप्त करें, और वह पंक्ति तालिका 1 या तालिका 2 से हो सकती है जो उस स्थिति के आधार पर हो सकती है जिसका टाइमस्टैम्प नवीनतम है
 – 
abhi
14 जून 2017, 12:46
अंतिम प्रश्न देखें @abhi
 – 
Dixon
20 जून 2017, 19:50

आपके स्पष्टीकरण से, यह तब करेगा:

 SELECT 
  foreign_id,
  CASE
   WHEN max_time_table1 < max_time_table2 THEN max_time_table2
   WHEN max_time_table2 < max_time_table1 THEN max_time_table1
 END as timestamps
FROM(
 SELECT
  t1.foreign_id,
  SUBSTRING_INDEX(GROUP_CONCAT(t1.timestamp ORDER BY t1.id DESC),',',1)    max_time_table1,
 SUBSTRING_INDEX(GROUP_CONCAT(t2.timestamp ORDER BY t2.id DESC),',',1) max_time_table2
FROM *table1* t1
LEFT JOIN *table2* t2 USING (foreign_id)
GROUP BY foreign_id) a; 
0
Dixon 14 जून 2017, 18:18