2013-02-08 17 views
8

पुनर्प्राप्त करें मैंने अन्य पोस्टों के समान कुछ के लिए समाधान देखा है, लेकिन मुझे अपनी विशिष्ट समस्या के लिए इसे लागू करने में कोई समस्या हो रही है।MySQL - टेबल में शामिल हों, केवल अधिकतम आईडी

यहाँ मेरी प्रारंभिक शामिल हो जाता है:

SELECT service_note_task, comment_id, comment FROM service_note_task LEFT JOIN service_note_task_comments ON service_note_task.service_note_task_id = service_note_task_comments.service_note_task_id; 

कौन सा में परिणाम:

+-----------------------------+------------+--------------+ 
| service_note_task   | comment_id | comment  | 
+-----------------------------+------------+--------------+ 
| This is service note task 3 |   25 | Comment  | 
| This is service note task 3 |   26 | Comment Blah | 
| This is service note task 3 |   36 | aaa   | 
| This is service note task 2 |   13 | Awesome comm | 
| This is service note task 1 |   12 | Cool Comm | 
+-----------------------------+------------+--------------+ 

लेकिन हर service_note_task के लिए, मैं वास्तव में केवल एक पंक्ति उच्चतम comment_id साथ टिप्पणी का प्रतिनिधित्व करने वाली इस तरह की जरूरत है:

+-----------------------------+------------+--------------+ 
| service_note_task   | comment_id | comment  | 
+-----------------------------+------------+--------------+ 
| This is service note task 3 |   36 | aaa   | 
| This is service note task 2 |   13 | Awesome comm | 
| This is service note task 1 |   12 | Cool Comm | 
+-----------------------------+------------+--------------+ 

मुझे लगता है कि मैं एक उप-चयन कथन में MAX का उपयोग कर सकता हूं परिणाम के रूप में मुझे नीचे देना चाहते हैं। इन परिणामों को प्राप्त करने के लिए मैं अपने बयान में इसे कैसे शामिल कर सकता हूं?

उत्तर

0

जब से तुम आरडीबीएमएस प्रयोग कर रहे हैं उल्लेख नहीं किया है, ज्यादातर कई आरडीबीएमएस पर काम करता है नीचे इस क्वेरी (नहीं सभी)

SELECT a.*, b.* -- select only the columns you want. 
FROM service_note_task a 
     INNER JOIN service_note_task_comments b 
      ON a.service_note_task_id = b.service_note_task_id 
     INNER JOIN 
     (
      SELECT service_note_task_id, MAX(commentID) max_ID 
      FROM service_note_task_comments 
      GROUP BY service_note_task_id 
     ) c ON b.service_note_task_id = c.service_note_task_id AND 
       b.commentID = c.max_ID 

अपने आरडीबीएमएस विश्लेषणात्मक कार्य का समर्थन करता है, तो आप नीचे का उपयोग कर सकते हैं,

SELECT a.service_note_task, b.comment_id, b.comment 
FROM service_note_task a 
     INNER JOIN 
     (
      SELECT service_note_task_id, comment_id, comment, 
        ROW_NUMBER() OVER (PARTITION BY service_note_task_id 
             ORDER BY comment_id DESC) rn 
      FROM service_note_task_comments 
      GROUP BY 
     ) c ON a.service_note_task_id = b.service_note_task_id AND 
       b.rn = 1 
+0

service_note_task_id सबक्वेरी – Noxthron

0

कोशिश:

SELECT service_note_task, comment_id, comment 
FROM service_note_task SNT1 
LEFT JOIN service_note_task_comments ON service_note_task.service_note_task_id = service_note_task_comments.service_note_task_id 
WHERE comment_id = (SELECT MAX(comment_id) FROM service_note_task SNT2 WHERE SNT1.service_note_task = SNT2.service_note_task); 
0
SELECT service_note_task, comment_id, comment 
FROM service_note_task s LEFT JOIN service_note_task_comments sc 
    ON s.service_note_task_id = sc.service_note_task_id; 
WHERE EXISTS (
       SELECT 1 
       FROM service_note_task_comments s2 
       WHERE s.service_note_task_id = s2.service_note_task_id 
       HAVING MAX(s2.comment_id) = sc.comment_id 
      ) 
+0

अंदर अनुभाग "द्वारा समूह" में जोड़ा जाना चाहिए तुम्हारा था निकटतम जवाब है, धन्यवाद, लेकिन अभी भी नहीं काफी मुझे क्या चाहिए। इसने सर्विस टास्क 3 के लिए नवीनतम टिप्पणी वापस कर दी, लेकिन उसने अन्य पंक्तियों, सेवा नोट 2 और 1. – jwBurnside

+0

को वापस नहीं किया है और आपके डेटा का टुकड़ा दिखाएं और मैं एक समस्या हल करने का प्रयास करता हूं। –

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