2015-05-18 13 views
10

Tôi có một bảng và muốn tìm giá trị tối thiểu và tối đa của giá. Tôi muốn nhận giá tối thiểu từ action_table khi ngày hiện tại giữa "từ" và "đến".Lựa chọn có điều kiện giữa các ngày

from  to   action_price price 
2015-04-02 2015-08-02 20   25 
2015-04-02 2015-04-20 0    30 
2015-04-03 2015-04-21 0    40 

Vì vậy, từ bảng trên, chúng tôi cần: min-> 20 (vì ngày hiện tại giữa "từ"/"để") và Max-> 40

Tôi đã thử một cái gì đó như đó, nhưng không làm việc như mong đợi:

SELECT 
CASE WHEN curdate() BETWEEN from AND to THEN MAX(action_price) ELSE MAX(price) END AS max, 
CASE WHEN curdate() BETWEEN from AND to THEN MIN(action_price) ELSE MIN(price) END AS min 
FROM `table`; 

Trả lời

7

Nếu tôi hiểu đúng, bạn muốn minumum và tối đa các giá trị:

20, 30, 40

Bạn chỉ cần quấn tuyên bố trường hợp bên trong chức năng tổng hợp thay vì cách khác vòng:

SELECT 
MIN(CASE WHEN CURDATE() BETWEEN `from` AND `to` THEN action_price ELSE price END) AS `min`, 
MAX(CASE WHEN CURDATE() BETWEEN `from` AND `to` THEN action_price ELSE price END) AS `max` 
FROM action_table; 
+------+------+ 
| min | max | 
+------+------+ 
| 20 | 40 | 
+------+------+ 
+0

Cảm ơn bạn rất nhiều! – user889349

2

tôi nghĩ rằng một "cÓ" tuyên bố sẽ làm việc ở đây:

http://sqlfiddle.com/#!9/4653c/4

+0

Có thể lấy giá tối đa trong một yêu cầu không? – user889349

+0

giải pháp duy nhất tôi có trong tâm trí ngay bây giờ là sử dụng một subselect xấu xí ... http://sqlfiddle.com/#!9/ff6107/7 –

+0

Tôi có 4 cột trong cơ sở dữ liệu của tôi. Nhưng bạn có 3 ?! – user889349

1

Điều này sẽ hoạt động để nhận được giá trị tối thiểu trong action_price.

SELECT MIN(action_price) 
FROM yourdb 
WHERE DATE_FORMAT(CURDATE(), '%Y-%m-%d') > from 
    AND DATE_FORMAT(CURDATE(), '%Y-%m-%d') < to; 

Tôi đã thử tính năng này và làm việc, tôi vừa đổi tên 'từ' thành 'thành' vì chúng là những từ dành riêng trên MySQL.

Đối với giá trị MAX, tôi không biết bạn chính xác muốn gì, điều kiện nào để nhận được giá trị đó là MAX? Tương tự như đối với MIN? Dù sao, hãy cho tôi biết và tôi sẽ cải thiện câu trả lời của mình với truy vấn tương ứng cho nó.

Các vấn đề liên quan