Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Группировка и вывод последних двух записей

Сообщения:  [1-8] 

 
 автор: Trianon   (18.01.2010 в 21:05)   письмо автору
 
   для: Слух   (18.01.2010 в 20:48)
 

Вы напишите юнион на десяток тысяч товаров с годичной выборкой цен - тогда можно будет сравнивать.

  Ответить  
 
 автор: Слух   (18.01.2010 в 20:48)   письмо автору
 
   для: Trianon   (18.01.2010 в 19:34)
 

Да уж, по времени выполнения практически 1в1 в с юнион, главный плюс конечно же не нужно явно указывать ид товара. Спасибо большое)

  Ответить  
 
 автор: Trianon   (18.01.2010 в 20:43)   письмо автору
 
   для: heed   (18.01.2010 в 20:13)
 

Не, ну речь то о том, чтоб всю аналитику спихнуть на SQL...
Понятно, что на стороние приложения можно хоть слоника купить запрограммировать.

Впрочем, если расставить адекватные индексы вроде UNIQUE item_date(item_id, date_time) , то может статься, не так уж прожорливо всё будет...

  Ответить  
 
 автор: heed   (18.01.2010 в 20:13)   письмо автору
 
   для: Trianon   (18.01.2010 в 19:34)
 

Как вариант можно просто всё выбирать отсортированным по ключам и датам
SELECT * FROM pr GROUP BY item_id, date_time DESC;

и потом в цикле анализировать и выводить только нужное.
, но тоже с минусом , в том что результат запроса будет большим
особенно если там цены начиная с конца прошлого века

  Ответить  
 
 автор: Trianon   (18.01.2010 в 19:34)   письмо автору
 
   для: Слух   (18.01.2010 в 19:12)
 

Вот основа:
SELECT a.item_id , d1,  MAX(b.date_time) AS d0
  FROM 
    (SELECT item_id, MAX(date_time) AS d1 
      FROM goods GROUP BY item_id ) AS a 
        LEFT JOIN goods b ON a.item_id = b.item_id AND b.date_time < d1 
  GROUP BY a.item_id, d1

Дальше к ней подсоединяются по ключам item_id и date_time копии таблицы для определения цен товара.

Запрос не самый легкий в плане ресурсов.

  Ответить  
 
 автор: Слух   (18.01.2010 в 19:12)   письмо автору
 
   для: Trianon   (18.01.2010 в 19:00)
 

>что означает id и что означает item_id?
id это идентификатор записи в таблице, примари кей
а item_id это идентификатор товара

>В частности, здесь запрос для единицы и двойки - это один и тот же товар?
разный товар


Примерные данные в таблице, может поможет
id date_time item_id price
1 2009-11-01 1 100
2 2009-11-01 2 54
3 2009-11-02 1 101
4 2009-11-02 2 53
5 2009-11-03 1 105
6 2009-11-03 2 52

Нужно получить

Item_id date price
1 2009-11-03 105
2 2009-11-03 52
1 2009-11-02 101
2 2009-11-02 53

Либо просто 2 записи но с еще одним полем например предыдущая цена, либо просто значение поднялась цена или опустилась(наверно еще может остатся такой же)

  Ответить  
 
 автор: Trianon   (18.01.2010 в 19:00)   письмо автору
 
   для: Слух   (18.01.2010 в 18:38)
 

что означает id и что означает item_id?
В частности, здесь запрос для единицы и двойки - это один и тот же товар?

  Ответить  
 
 автор: Слух   (18.01.2010 в 18:38)   письмо автору
 
 

Может неправильно выразился но поиск ничего не дал.

Есть таблица с такими полями
id date_time item_id price

Грубо говоря цены меняются раз в сутки, как можно вывести одним запросом текущие цены(самые последние по дате), и признак, цена упала или поднялась? Я додумался только до такого варианта

(select * from table where item_id = 1 order by date_time desc limit 2)
union
(select * from table where item_id = 2 order by date_time desc limit 2)


Это удобно если предметов мало и количество меняется редкто, чтобы не лезть часто в код. Но если предметов много, и меняются часто? Возможно ктото уже сталкивался с подобными ситуациями.
Да у меня там конечно же в php будет дополнительная обработка и сравнение цены, но это уже ньюансы, данные то у нас все есть чтобы понять выросла цена или опустилась.

ЗЫ забыл указать, нужно вывести цены для всех предметов сразу

  Ответить  

Сообщения:  [1-8] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования