2012-02-20 22 views
5

Bana (a) en yüksek fiyat veya (b) en eski zaman damgası olan sonucu veren bir sorguya ihtiyacım var.ORDER BY birden fazla koşulda

id | price | date 
1 | 5 | 2012-02-20 08:59:06 
2 | 5 | 2012-02-20 09:59:06 
3 | 7 | 2012-02-20 10:59:06 
: Her durumda, fiyat koz damgası İşte

birkaç senaryo verilmiştir (rekor diğerlerinin tümünden yüksek fiyata göre çok eski bir zaman damgası varsa yani, her zaman en yüksek fiyat ile rekor dönmelidir) olmalıdır en yüksek fiyat

id | price | date 
1 | 5 | 2012-02-20 08:59:06 
2 | 5 | 2012-02-20 09:59:06 
3 | 5 | 2012-02-20 10:59:06 

dönmelidir id 1 olduğu için ben th yapıyorum benim şimdiki sorguda eski

olduğundan

id 3 dönmelidir şudur:

SELECT * FROM table ORDER BY price, date DESC LIMIT 1 

Ne yazık ki bu sorgu yukarıda nasıl belirttiğim çalışmıyor. En yüksek fiyat için eski zaman damgası aradığınız gibi Yardımlarınız sorun sonra ne tam olarak belirleyen yaşıyorum

+4

iki özdeş veri setleri göstermiştir deneyin ve farklı sonuçlar talep ediyoruz. 2 farklı sorguya sahip olmak istiyor musunuz? değilse, doğru sonuç hangisidir? – Randy

+0

Veri kümelerinizde bir fark göremiyorum, bu yüzden neyi başarmaya çalıştığınızı anlamak oldukça zordur ... :) – zaphod1984

+0

2. örnek niçin ikinci örnek geri dönmelidir? Fiyatın daima zaman damgasını aşması gerektiğini belirttiniz. –

cevap

11

için

sayesinde ancak sesler ve böylece aşağıdaki yeterli olacaktır

SELECT * 
FROM table 
ORDER BY 
    price DESC, // Favour the highest price 
    date ASC  // Now get the one with oldest date at this price 
LIMIT 1 
+0

, problemin açıklanmamamıza rağmen işe yarayacak. Teşekkürler! –

0
i sorunuzu anlamak umut

, bu

SELECT 
    p.* 
FROM table p 
WHERE price = (SELECT MAX(price) FROM table) 
    OR date = (SELECT MIN(date) FROM table)