2011-11-27 5 views
0

Как я могу получить самую последнюю дату и наиболее часто встречающиеся значения в базе данных 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; 

Мне сложно определить это. Благодаря!

+0

пробег два запроса – Galen

+0

Это было бы типичная задача для оконной функции ('OVER') в Oracle, PostgreSQL или SQL Server. Но у MySQL нет такой функциональности. –

+0

Попробуйте сделать [производную таблицу] (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

ответ

0

Вы должны использовать подзапросы, лучший способ оптимизировать Ваш запрос:

первым вы выбираете максимальную (дата) & второй вы отфильтровывать цена снова

+0

Да, я пробовал это, но я никогда не получаю хороший результат. Я не часто использую mysql. – user1061392

+0

попробуйте выполнить ваш новый запрос в SQL-области в MySQL – LJme

+0

Прошу прощения. Я не знаю, как это сделать – user1061392

0

Попробуйте

создать таблица #temp ( выбрать максимум (дата), имя из tblname группы по имени )

, а затем сделать полное сканирование таблицы на #temp таблицы и получить идентификаторы из tblname где

temp.date = tblname.date и # temp.name = tblname.date

Смежные вопросы