2012-03-01 21 views
9

olduğunda en yeni kaydı seçin Bir sorgu yazıyorum ve bu çözümü this thread içinde kullandım ve biraz çalıştı ama hala biraz sorun yaşıyorum.SQL - Yinelenen bir

Çoğu parça için benzersiz olan bir grup kayıt seçmek istiyorum, ancak iki kez gerçekleşen birkaç tane var. Sadece en yeni tarihe sahip olan kaydı seçebilmek istiyorum. o çiftleri sahip olan kayıtların son kaydım alır, ancak kopyaları YAPMAYIN bu kayıtlar hiç görünmüyor buraya kadar çalışır

SELECT tb1.id,tb1.type,tb1.date 

FROM Table tb1 

WHERE tb1.type = 'A' OR 'B' 
AND tb1.date = (SELECT TOP 1 tb2.date 
       FROM Table tb2 
       WHERE tb2.date = tb1.date 
       ORDER BY tb2.date DESC) 

: Bu benim defa sorgusu olur.

Herhangi bir yardım için teşekkürler; SQL oyununa yeniyim. bunu yapmak için birkaç yol var

+0

İade edilmeyen benzersiz satırların örnek verilerini, doğru olduğu yerde çoğaltılabilir misiniz? – kaj

+0

Tarihte katıldığınıza ve başka herhangi bir şeye değil, örn. Bu kasıtlı mı? – kaj

+0

Daha spesifik olabilir misiniz? "Sadece en yeni tarihe sahip olan rekoru seçebilmeyi istiyorum" dedin ve daha sonra "ama DON'T kopyalarının çoğunun görünmediği kayıtlar hiç görünmüyor" ... benim için iki farklı şey gibi görünüyor. – Diego

cevap

17

, tek yönlü böyle ROW_NUMBER kullanmaktır:

SELECT id, type, date 
FROM 
(
    SELECT tb1.id, tb1.type, tb1.Date, 
     ROW_NUMBER() OVER (PARTITION BY tb1.id ORDER BY tb1.Date DESC) AS RowNo 
    FROM Table tb1 
    WHERE tb1.type IN ('A','B') 
) x 
WHERE x.RowNo = 1 

Bu için en son tarihi olan her ayrı kimliği değerini satır dönecektir.

+0

Teşekkürler AdaTheDev, bu sorunu çözdü ve daha fazla yinelenen ile sorguyu bitirebildim! –

+0

Küçük yazım hatası: tb2.Date tb1.Date olmalıdır – Vladimirs