You can leverage non-standard behavior of MySQL GROUP BY
extension and do
SELECT DATE(date_quotation) date_q, value
FROM
(
SELECT value, date_quotation
FROM quotation
WHERE date_quotation >= CURDATE() - INTERVAL 30 DAY
AND date_quotation < CURDATE() + INTERVAL 1 DAY
ORDER BY date_quotation DESC
) q
GROUP BY DATE(date_quotation)
or you can do it by the book by selecting a max value of date_quotation
per day (assuming that there is no duplicates) and then join back to quotation
to pick up value
SELECT date_q, value
FROM
(
SELECT DATE(date_quotation) date_q, MAX(date_quotation) date_quotation
FROM quotation
WHERE date_quotation >= CURDATE() - INTERVAL 30 DAY
AND date_quotation < CURDATE() + INTERVAL 1 DAY
GROUP BY DATE(date_quotation)
) t JOIN quotation q
ON t.date_quotation = q.date_quotation
Note: that both queries use an index-friendly way to filter for date period. Make sure that you have an index on date_quotation
column.
Here is SQLFiddle demo