2013-05-28 7 views
15

के साथ मेल खाने वाली दूसरी तालिका से अंतिम रिकॉर्ड का चयन करें मेरे पास दो टेबल ग्राहक और ऑर्डर हैं, नीचे संरचना है।MySQL - पहली तालिका

तालिका - ग्राहकों

  • आईडी
  • customer_name

तालिका - आदेश

  • आईडी
  • ORDER_ID
  • CUSTOMER_ID

ग्राहकों तालिका

आदेश तालिका में CUSTOMER_ID ग्राहकों तालिका के आईडी क्षेत्र से जुड़ा हुआ है, ग्राहकों को रिकॉर्ड और आदेश तालिका ग्राहकों द्वारा दिए गए आदेशों होता है।

अब एक ग्राहक के पास शून्य या एक से अधिक ऑर्डर हो सकते हैं, मैं केवल ग्राहकों द्वारा अंतिम आदेश प्राप्त करना चाहता हूं।

जब मैं निम्न क्वेरी एक सरल अदृश्य में शामिल होने के चलाने के लिए, यह ग्राहक

SELECT customers.customer_name,orders.order_id FROM orders,customers WHERE orders.customer_id=customers.id 

मैं भी अलग अलग बयानों में शामिल हों लेकिन ग्राहक द्वारा अंतिम आदेश नहीं मिल सकता है की कोशिश की है से सभी आदेश देता है, मैं चाहता हूँ इसे सभी ग्राहकों के लिए एक एसक्यूएल क्वेरी में प्राप्त करें।

आपकी मदद के लिए अग्रिम धन्यवाद।

उत्तर

11

इस क्वेरी का प्रयास करें

SELECT 
    c.customer_name, 
    max(o.order_id) 
FROM 
    customers c 
INNER JOIN 
    orders o 
ON 
    o.customer_id = c.id 
GROUP BY 
    c.customer_name 

तुम बहुत नवीनतम आदेश एक जो max(order_id) है हो जाएगा संभालने आदेश तालिका में किसी भी तारीख क्षेत्र नहीं है।

+1

अपने त्वरित प्रतिक्रिया के लिए धन्यवाद , अगर order_id यादृच्छिक है तो यह काम नहीं करेगा, लेकिन यह जो मैं ढूंढ रहा हूं उसके नजदीक है। – Alyas

+4

मैंने इसे निम्नलिखित के साथ हल किया है; 'C.customer_name, o.customer_id, o.order_id, o.id ग्राहकों से सी INNER जॉइन ऑर्डर ओ ओआईडी = पर ऑर्डर करें (ऑर्डर से चुनें आईडी जहां ग्राहक_आईडी = सी.आईडी आईडी आईडी डीईएससी लिमिटेड द्वारा ऑर्डर करें) ' – Alyas

+0

हाँ अगर ऑर्डर_आईडी यादृच्छिक है तो यह काम नहीं करेगा, तो आपके पास डेट फ़ील्ड होना चाहिए जिससे हम ऑर्डर_डेट प्राप्त कर सकें और नवीनतम ऑर्डर – Meherzad

-1

इस क्वेरी

SELECT 
    c.customer_name, 
    o.order_id 
FROM 
    customers c 
INNER JOIN 
    orders o 
ON 
    o.customer_id = c.id 
ORDER BY 
    o.id desc 
LIMIT 1; 
+0

यह केवल एक ग्राहक की अंतिम ऑर्डर जानकारी लौटाएगा, जबकि मुझे प्रत्येक ग्राहक की अंतिम ऑर्डर जानकारी की आवश्यकता होगी। – Alyas

18

MySQL में प्रयास करें वहाँ यह काम करने के लिए बस कुछ तरीके है (कि मैं अब वास्तव में)। पहले एक तरह join से पहले desc के रूप में अपनी मेज है:

SELECT c.customer_name, o.customer_id, o.order_id,o.id FROM customers c 
INNER JOIN orders o 
    ON o.id = (SELECT id FROM orders WHERE customer_id = c.id ORDER BY id DESC LIMIT 1) 

वास्तविक समय में उपयोग करते हुए केवल यह कर पाने के लिए रास्ता है, लेकिन कुछ नहीं वास्तविक समय के आधार पर संयोजन अगर तुम बनाने की जरूरत है आप एक अस्थायी बना सकते हैं तो अब

CREATE TABLE tmp_your_table AS 
SELECT * FROM orders ORDER BY id DESC 

आप इस काम में शामिल होने बनाने में सक्षम हैं: टेबल या यह छँटाई एक उर्फ ​​तालिका अपने चयन बनाने के लिए, इस तरह

SELECT c.customer_name, o.customer_id, o.order_id,o.id FROM customers c 
INNER JOIN tmp_your_table o ON o.id = tmp_your_table.id 
+0

इस भाग ने मेरी क्वेरी 'INNER जॉइन ऑर्डर ओ ओ ओआईडी = के लिए मदद की है (ऑर्डर से चयन आईडी जहां आईडी_ईएससी लिमिटेड द्वारा ग्राहक_आईडी = सी.आईडी ऑर्डर 1) ' – FosAvance

+0

इसने मुझे बहुत मदद की, धन्यवाद: डी – FosAvance

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