Как я могу получить самую последнюю дату и наиболее часто встречающиеся значения в базе данных MySQL?Как получить самую последнюю дату и наиболее часто встречающиеся значения в базе данных MySQL
У меня есть база данных, как следующее:
+----+---------+---------+-----------------------+--------+------------+---------+
| id | Name | idStore | Name | idItem | date | price |
+----+---------+---------+-----------------------+--------+------------+---------+
| 1 | walmart | 1 | Red Delicious Apples | 1 | 2011-10-28 | 0.93000 |
| 2 | walmart | 1 | Red Delicious Apples | 1 | 2011-10-28 | 0.98000 |
| 3 | walmart | 1 | Red Delicious Apples | 1 | 2011-10-29 | 0.90000 |
| 4 | walmart | 1 | Red Delicious Apples | 1 | 2011-10-29 | 0.91000 |
| 5 | walmart | 1 | Red Delicious Apples | 1 | 2011-10-29 | 0.92000 |
| 6 | walmart | 1 | Red Delicious Apples | 1 | 2011-10-29 | 0.92000 |
| 7 | walmart | 1 | Red Delicious Apples | 1 | 2011-10-29 | 0.92000 |
| 8 | walmart | 1 | Red Delicious Apples | 1 | 2011-10-29 | 0.93000 |
| 9 | walmart | 1 | Red Delicious Apples | 1 | 2011-10-28 | 0.93000 |
| 10 | walmart | 1 | Red Delicious Apples | 1 | 2011-10-28 | 0.94000 |
| 11 | walmart | 1 | Red Delicious Apples | 1 | 2011-10-28 | 0.94000 |
| 12 | walmart | 1 | Red Delicious Apples | 1 | 2011-10-28 | 0.94000 |
| 13 | walmart | 1 | Red Delicious Apples | 1 | 2011-10-28 | 0.94000 |
| 14 | walmart | 1 | Red Delicious Apples | 1 | 2011-10-28 | 0.94000 |
| 15 | walmart | 1 | Red Delicious Apples | 1 | 2011-10-12 | 0.98000 |
| 16 | walmart | 1 | Honeycrisp Apples | 2 | 2011-10-22 | 1.98000 |
| 17 | walmart | 1 | Sonya Apples | 3 | 2011-10-22 | 2.88000 |
| 18 | walmart | 1 | Gold Delicious Apples | 4 | 2011-10-22 | 0.98000 |
| 19 | walmart | 1 | Sweet Tango Apples | 5 | 2011-10-22 | 2.48000 |
| 20 | walmart | 1 | Granny Smith Apples | 6 | 2011-10-22 | 1.28000 |
| 21 | walmart | 1 | Fugi Apples | 7 | 2011-10-22 | 1.38000 |
+----+---------+---------+-----------------------+--------+------------+---------+
Я хочу, чтобы получить следующий результат:
+----+---------+---------+-----------------------+--------+------------+---------+
| id | Name | idStore | Name | idItem | date | price |
+----+---------+---------+-----------------------+--------+------------+---------+
| 5 | walmart | 1 | Red Delicious Apples | 1 | 2011-10-29 | 0.92000 |
| 16 | walmart | 1 | Honeycrisp Apples | 2 | 2011-10-22 | 1.98000 |
| 17 | walmart | 1 | Sonya Apples | 3 | 2011-10-22 | 2.88000 |
| 18 | walmart | 1 | Gold Delicious Apples | 4 | 2011-10-22 | 0.98000 |
| 19 | walmart | 1 | Sweet Tango Apples | 5 | 2011-10-22 | 2.48000 |
| 20 | walmart | 1 | Granny Smith Apples | 6 | 2011-10-22 | 1.28000 |
| 21 | walmart | 1 | Fugi Apples | 7 | 2011-10-22 | 1.38000 |
+----+---------+---------+-----------------------+--------+------------+---------+
Я использую следующий запрос, но он не работает, потому что это дает мне все элементы, имеют последнюю дату
select id, store_name as Name, idStore, Name, idItem , max(Price.date), min(Price.price) From table group by idStore, Store.Name, idItem, Item.Name, price ORDER BY idItem ASC, date DESC;
Я удалил цену из группировки и получил минимальную цену t наиболее часто встречающиеся)
select id, store_name as Name, idStore, Name, idItem , max(Price.date), min(Price.price) From table group by idStore, Store.Name, idItem, Item.Name ORDER BY idItem ASC, date DESC;
Мне сложно определить это. Благодаря!
пробег два запроса – Galen
Это было бы типичная задача для оконной функции ('OVER') в Oracle, PostgreSQL или SQL Server. Но у MySQL нет такой функциональности. –
Попробуйте сделать [производную таблицу] (http://dev.mysql.com/doc/refman/5.0/en/comparisons-using-subqueries.html) в своем предложении 'FROM', вызывая под-' SELECT', который получает максимальную дату [или цену], а затем сравнивает данные «максимального значения», найденные в вашей базовой таблице. Но [использовать представления] (http://www.mysqlperformanceblog.com/2006/08/31/derived-tables-and-views-performance/), чтобы поддерживать производительность. – Droogans