2015-09-24 18 views
5

Aşağıdaki tablodan en son ve en özgün kaydı almaya çalışın. İçinde birkaç çift vardır, bunlar filtrelenmelidir.Sütun son girdiyi diğer sütundan benzersiz olarak SELECT

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 

Bu sorguyu kullanmak (burada bulunur) en iyi çabamdır ancak yalnızca bir sonuç döndürür.

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 

Umut birisi bir çözümü vardır:

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

'konu' için 'eylem' son giriş ve benzersiz olarak bu girişi almak ister misiniz! Teşekkürler!

+0

Evet. Zaman damgaları her zaman benzersizdir. – KJS

+0

Kimliklerinizin artması nedeniyle son kayıt maksimum kimliğe sahip olacaktır. doğru? – Andreas

cevap

4

Bunu bir alt sorgu ile yapabilirsiniz. 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

Harika çözüm! Çok teşekkür ederim! – KJS

1

Bir alt sorgu kullanmak gerekir:

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

alt sorgu her konu için büyük eylemi bulur Bu tam sqlfiddle olduğunu. Bu veriler daha sonra, "max'd" kaydındaki diğer alanları getirmek için kullandığınız aynı tabloya katılmak için kullanılır.

1

Üzgünüm, eğer doğru değilse sorunuzu okuyun. İşte çalışan bir sorgu:

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; 

Sonuç:

+----+-------+--------+---------------------+ 
| 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) 
İlgili konular