मेरे पास दो टेबल हैं
Table A
pk name a_date
1 Peter 01-01-1991
2 Paul 02-01-1991
3 John 03-01-1991
Table B
pk b_date
A 01-01-1991
B 02-01-1991
मैं जो चाहता हूं वह परिणाम है:
name a_date b_date
Paul 02-01-1991 01-01-1991
John 03-01-1991 02-01-1991
तालिका ए के लिए तालिका बी की निकटतम छोटी तिथि का चयन करें
मैंने चयन करने से पहले परिणाम खींचने की कोशिश की
1 Peter 01-01-1991 A 01-01-1991
1 Peter 01-01-1991 B 02-01-1991
2 Paul 02-01-1991 A 01-01-1991
2 Paul 02-01-1991 B 02-01-1991
3 John 03-01-1991 A 01-01-1991
3 John 03-01-1991 B 02-01-1991
तब मैंने ए, बी से चयन करने की कोशिश की जहां a_date>b_date
लेकिन यह इस तरह वापस आ जाएगा:
2 Paul 02-01-1991 A 01-01-1991
3 John 03-01-1991 A 01-01-1991
3 John 03-01-1991 B 02-01-1991
मैंने उप-क्वेरी जैसी कुछ चीज़ों की भी कोशिश की: जहां a_date = (चुनें...); लेकिन मुझे लगता है कि यह गलत तरीका है। तो मुझे लगता है कि अलग हो सकता है इस समस्या को हल कर सकता है, लेकिन मुझे लगता है कि मैं इस मामले में विशिष्ट का उपयोग नहीं कर सकता।
2 जवाब
इसे यह करना चाहिए (यह मानता है कि तिथियां date
के रूप में संग्रहीत हैं न कि तार के रूप में):
SELECT a.name, a.date, MAX(b.date)
FROM a
JOIN b ON b.date < a.date
GROUP BY a.name, a.date
MySql 7.x में आप एक उप-क्वेरी में शामिल हो सकते हैं जो निकटतम की गणना करती है।
SELECT
a.*,
b.pk as b_pk,
b.b_date
FROM TableA a
INNER JOIN
(
SELECT
a2.pk as a_pk,
MAX(b2.pk) AS b_pk
FROM TableA a2
JOIN TableB b2 ON b2.b_date < a2.a_date
GROUP BY a2.pk
) q ON q.a_pk = a.pk
LEFT JOIN TableB b ON b.pk = q.b_pk
rextester यहां पर एक परीक्षण
MySQL 8 में आप इसके लिए विंडो फ़ंक्शन का उपयोग कर सकते हैं।
SELECT pk, name, a_date, b_pk, b_date
FROM
(
SELECT a.*,
b.pk AS b_pk,
b.b_date,
ROW_NUMBER() OVER (PARTITION BY a.pk ORDER BY b.b_date DESC) AS rn
FROM TableA a
JOIN TableB b ON b.b_date < a.a_date
) q
WHERE rn = 1
db-fiddle यहां पर एक परीक्षण
संबंधित सवाल
नए सवाल
mysql
MySQL एक फ्री, ओपन सोर्स रिलेशनल डेटाबेस मैनेजमेंट सिस्टम (RDBMS) है जो स्ट्रक्चर्ड क्वेरी लैंग्वेज (SQL) का उपयोग करता है। इस टैग को अन्य DBs जैसे SQL Server, SQLite आदि के लिए उपयोग न करें। वे विभिन्न DB हैं जो सभी डेटा का प्रबंधन करने के लिए SQL की अपनी बोलियों का उपयोग करते हैं।