2015-09-24 12 views
5

से अनन्य के रूप में चुनें, नीचे दी गई तालिका से अंतिम और अद्वितीय रिकॉर्ड प्राप्त करने का प्रयास करें। इसमें कुछ युगल हैं, जिन्हें फ़िल्टर किया जाना चाहिए।कॉलम में अंतिम प्रविष्टि को अन्य कॉलम

id topic action date 
1 10127 2 2015-09-24 15:28:30 
2 10127 4 2015-09-24 15:29:26 
3 10127 2 2015-09-24 15:30:01 
4 10127 3 2015-09-24 15:30:55 
5 10127 1 2015-09-24 16:07:25 
6 10127 5 2015-09-24 16:10:25 
7 10127 4 2015-09-24 16:29:26 

इस क्वेरी का उपयोग (यहां पाया गया) मेरा सबसे अच्छा प्रयास है, लेकिन केवल एक परिणाम देता है।

id topic action date 
3 10127 1 2015-09-24 15:30:01 
4 10127 2 2015-09-24 15:30:55 
5 10127 3 2015-09-24 16:07:25 
6 10127 4 2015-09-24 16:10:25 
7 10127 5 2015-09-24 16:29:26 

आशा किसी को एक समाधान है:

SELECT MAX(action) as action,topic,date FROM ...... 
GROUP by topic 
ORDER by action DESC 

'विषय' के लिए नवीनतम प्रविष्टि और अद्वितीय 'कार्रवाई' पर के रूप में इस सूची प्राप्त करना चाहते हैं! धन्यवाद!

+0

हां। टाइमस्टैम्प हमेशा अद्वितीय होते हैं। – KJS

+0

चूंकि आपकी आईडी बढ़ती जा रही है क्योंकि अंतिम रिकॉर्ड में अधिकतम आईडी होगी। सही बात? – Andreas

उत्तर

4

आप इसे सबक्वायरी के साथ कर सकते हैं। http://sqlfiddle.com/#!9/f7afa/23

Select * FROM (

SELECT 
    DISTINCT `topic`, `action`, `date` 
FROM 
    ForgeRock  
ORDER by date DESC, action ASC 

) as X 
    GROUP BY action 
+0

ग्रेट सॉल्यूशन! आपका बहुत बहुत धन्यवाद! – KJS

1

आप एक सबक्वेरी उपयोग करने की आवश्यकता:

SELECT * 
FROM yourtable 
JOIN (
    SELECT topic, MAX(action) 
    FROM yourtable 
    GROUP BY topic 
) AS child ON (yourtable.topic = topic) AND (yourtable.action = child.action) 

सबक्वेरी हर विषय के लिए सबसे बड़ा कार्रवाई पाता है यह पूरा sqlfiddle है। उस डेटा का उपयोग उसी तालिका के साथ जुड़ने के लिए किया जाता है, जिसका उपयोग आप "max'd" रिकॉर्ड में अन्य फ़ील्ड लाने के लिए करते हैं।

1

क्षमा करें, अगर आपके प्रश्न को सही नहीं पढ़ा है। यहाँ एक काम कर क्वेरी:

SELECT id,topic,@action:[email protected]+1 AS ACTION,DATE 
FROM 
    (SELECT t1.id, 
      t1.topic, 
      t1.date , 
      t2.id AS dup 
    FROM tab t1 
    LEFT JOIN tab t2 ON t1.action = t2.action 
    AND t2.id > t1.id) AS t, 

    (SELECT @action:=0) AS tmp 
WHERE dup IS NULL; 

परिणाम:

+----+-------+--------+---------------------+ 
| id | topic | ACTION | date    | 
+----+-------+--------+---------------------+ 
| 3 | 10127 |  1 | 2015-09-24 15:30:01 | 
| 4 | 10127 |  2 | 2015-09-24 15:30:55 | 
| 5 | 10127 |  3 | 2015-09-24 16:07:25 | 
| 6 | 10127 |  4 | 2015-09-24 16:10:25 | 
| 7 | 10127 |  5 | 2015-09-24 16:29:26 | 
+----+-------+--------+---------------------+ 
5 rows in set (0.00 sec) 
संबंधित मुद्दे