2015-05-18 6 views
10

Ich habe eine Tabelle und möchte Mindest- und Höchstpreise finden. Ich möchte einen minimalen Preis von action_table erhalten, wenn das aktuelle Datum zwischen "von" und "bis" liegt.Bedingte Auswahl zwischen Daten

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 

So aus der obigen Tabelle ich brauche: Min-> 20 (weil die aktuelle Datum zwischen "von"/"bis") und Max-> 40

ich versucht habe, so etwas wie das, aber funktionieren nicht wie erwartet:

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

Antwort

7

Wenn ich richtig verstehe, wollen Sie minumum und Maximum dieser Werte:

20, 30, 40

Sie müssen lediglich die Case-Anweisung innerhalb der Aggregatfunktionen wickeln statt umgekehrt:

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

Vielen Dank! – user889349

2

ich denke, eine „haben“ Erklärung hier funktioniert:

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

+0

Ist es möglich, in einer Anfrage auch den Höchstpreis zu erhalten? – user889349

+0

die einzige Lösung, die ich im Moment im Sinn habe, ist eine hässliche Subselect zu verwenden ... http://sqlfiddle.com/#!9/ff6107/7 –

+0

Ich habe 4 Spalten in meiner Datenbank. Aber deine hast 3 ?! – user889349

1

Dies sollte funktionieren, um den Mindestwert in action_price zu erhalten.

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

Ich habe versucht, diese an der Geige, und arbeitete, ich ‚von‘ nur umbenannt und ‚auf‘ Spalte, da sie Worte auf MySQL reserviert sind.

Wie für die MAX Wert, ich weiß nicht, was Sie genau wollen, was wäre die Bedingung, dass MAX-Wert zu bekommen? Wie für MIN? Wie auch immer, lassen Sie es mich wissen und ich werde meine Antwort mit der entsprechenden Abfrage dafür verbessern.

Verwandte Themen