2012-02-20 37 views
5

Tôi cần một truy vấn sẽ cho tôi kết quả là (a) giá cao nhất hoặc (b) giá có dấu thời gian cũ nhất. Trong mọi trường hợp, giá cả nên trump timestamp (tức là nếu một bản ghi có dấu thời gian thực sự cũ bởi giá cao hơn tất cả những người khác, nó phải luôn luôn trả lại kỷ lục với mức giá cao nhất)ĐẶT HÀNG theo nhiều điều kiện

Dưới đây là một vài tình huống:

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 

nên trở id 3 vì nó là mức giá cao nhất

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 

nên trả lại id 1 vì nó là lâu đời nhất

Trong truy vấn hiện tại của tôi tôi đang làm thứ là:

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

Rất tiếc, truy vấn này không hoạt động như cách tôi đã nêu trên.

Nhờ sự giúp đỡ của bạn

+4

bạn đã chỉ ra hai bộ dữ liệu giống hệt nhau, và yêu cầu kết quả khác nhau. Bạn có ý định có 2 truy vấn khác nhau không? nếu không, đó là kết quả chính xác? – Randy

+0

tôi thấy không có sự khác biệt trong bộ dữ liệu của bạn do đó nó khá khó hiểu những gì bạn đang cố gắng để đạt được ... :) – zaphod1984

+0

lý do tại sao nên trở lại ví dụ thứ 2 id 1? Bạn đã đề cập rằng giá phải luôn luôn đánh dấu thời gian. –

Trả lời

11

Tôi đang gặp rắc rối xác định một cách chính xác những gì bạn đang sau, tuy nhiên có vẻ như bạn đang tìm kiếm dấu thời gian lâu đời nhất với mức giá cao nhất, và vì vậy sau đây cần đủ

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

hoạt động mặc dù giải thích rõ ràng của tôi về vấn đề này. cảm ơn! –

0

tôi hy vọng tôi hiểu câu hỏi của bạn, hãy thử này

SELECT 
    p.* 
FROM table p 
WHERE price = (SELECT MAX(price) FROM table) 
    OR date = (SELECT MIN(date) FROM table) 
Các vấn đề liên quan