2012-02-20 16 views
5

Potrzebuję zapytania, które da mi wynik, który jest albo (a) najwyższą ceną, albo (b) tą z najstarszym znacznikiem czasu. We wszystkich przypadkach cena powinna atutem timestamp (czyli jeśli płyta ma bardzo stare timestamp wyższą cenę niż wszystkich innych, to zawsze powinien zwrócić zapis o najwyższej cenie)ORDER BY na wielu warunkach

Oto kilka scenariuszy:

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 

powinien wrócić id 3, ponieważ jest to najwyższa cena

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 

powinien wrócić id 1, ponieważ jest najstarszą

w moim obecnym zapytania robie th to:

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

Niestety to zapytanie nie działa w ten sposób, jak to opisałem powyżej.

Dzięki za pomoc

+4

zostały pokazane dwa identyczne zestawy danych, i poprosić różne wyniki. Czy masz zamiar mieć 2 różne zapytania? jeśli nie, jaki jest poprawny wynik? – Randy

+0

Nie widzę różnicy w twoich zbiorach danych, dlatego trudno jest zrozumieć, co próbujesz osiągnąć ... :) – zaphod1984

+0

dlaczego drugi przykład powinien zwrócić id 1? Wspomniałeś, że cena powinna zawsze pokonać znacznik czasu. –

Odpowiedz

11

Mam problemy określającą dokładnie to, czego po, jakkolwiek to brzmi jak szukasz najstarszego datownik za najwyższą cenę, a więc następujące powinno wystarczyć

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

, który działa pomimo mojego niejasnego wyjaśnienia problemu. dzięki! –

0

mam nadzieję, że rozumiem Twoje pytanie, spróbuj tego

SELECT 
    p.* 
FROM table p 
WHERE price = (SELECT MAX(price) FROM table) 
    OR date = (SELECT MIN(date) FROM table) 
Powiązane problemy