2015-05-18 16 views
10

Ho una tabella e vorrei trovare i valori minimi e massimi del prezzo. Mi piacerebbe ottenere il prezzo minimo da action_table quando la data corrente tra "from" e "to".Selezione condizionale tra le date

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 

Così dalla tabella di cui sopra ho bisogno: min-> 20 (perché la data corrente tra "da"/"a") e massimizzando> 40

Ho provato qualcosa di simile che, ma non funzionano come previsto:

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`; 

risposta

7

Se ho capito bene, si vuole minumum e il massimo di questi valori:

20, 30, 40

Hai semplicemente bisogno di avvolgere l'istruzione case all'interno delle funzioni di aggregazione invece di viceversa:

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

Grazie mille! – user889349

2

penso che una dichiarazione "avere" funzionerà qui:

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

+0

È possibile anche ottenere il prezzo massimo in una richiesta? – user889349

+0

l'unica soluzione che ho in mente adesso è quella di usare una brutta sottoselezione ... http://sqlfiddle.com/#!9/ff6107/7 –

+0

Ho 4 colonne nel mio database. Ma i tuoi hanno 3 ?! – user889349

1

Questo dovrebbe funzionare per ottenere il valore minimo in action_price.

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

Ho provato questo al violino, e lavorato, ho appena rinominato 'da' e 'a' colonna dal momento che sono parole riservate su MySQL.

Per quanto riguarda il valore MAX, non so cosa desideri esattamente, quale sarebbe la condizione per ottenere il valore MAX ? Come per MIN? In ogni caso, fammi sapere e migliorerò la mia risposta con la query corrispondente.