Сложный запрос в базу данных.... помогите разобрать.

computerworks

Новичок
Помогите одолеть сложный запрос.
Нужно найти разницу Prodano - Kol для каждой первой и последней записи каждого различного поля product (т.е. в указанных данных это будет 25, 35, 15, 10 - строки 1,5,6,9)
Как? Ниже приложен дамп БД.


База данных: `testing`
Структура таблицы `data`

CREATE TABLE IF NOT EXISTS `data` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`snek` varchar(255) NOT NULL,
`prodano` int(11) NOT NULL,
`kode` int(11) NOT NULL,
`data` datetime NOT NULL,
`kol` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;

--
-- Дамп данных таблицы `data`
--

INSERT INTO `data` (`id`, `product`, `prodano`, `kode`, `data`, `kol`) VALUES
(1, 'Сникерс', 30, 1, '2013-04-25 19:51:14', 5),
(2, 'Сникерс', 30, 1, '2013-04-25 19:51:29', 6),
(3, 'Сникерс', 30, 1, '2013-04-25 19:51:29', 6),
(4, 'Сникерс', 30, 1, '2013-04-25 19:51:29', 6),
(5, 'Сникерс', 45, 1, '2013-04-25 19:51:29', 10),
(6, 'Марс', 45, 2, '2013-04-25 19:51:51', 30),
(7, 'Марс', 45, 2, '2013-04-25 19:51:51', 30),
(8, 'Марс', 45, 2, '2013-04-25 19:51:51', 30),
(9, 'Марс', 20, 2, '2013-04-25 19:52:23', 10);
 

С.

Продвинутый новичок
Не знаешь, как сделать сложный SQL запрос, пиши простые РНР команды.

Откуда вообще взялась такая идея, что любую прикладную задачу можно решить одним "сложным" запросом? А если и можно, то зачем так ее решать?
 

computerworks

Новичок
Не знаешь, как сделать сложный SQL запрос, пиши простые РНР команды.

Откуда вообще взялась такая идея, что любую прикладную задачу можно решить одним "сложным" запросом? А если и можно, то зачем так ее решать?
т.е. вы не знаете можно ли это сделать и если да, то как?
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Знаем, почему нет. Выьери минимальное и максимально значение id для группы товаров, и посчитай то, что тебе надо.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Код:
SELECT нужные поля  FROM data 
WHERE id IN (
    SELECT * FROM 
    ( 
      SELECT MIN(id) as id FROM data GROUP BY kode
    UNION
      SELECT MAX(id) as id FROM data GROUP BY kode
    ) subQuery 
    ORDER BY subQuery.id
)
Навскидку так
 

computerworks

Новичок
А как по минимальному и максимальному значению id в одном запросе найти то что надо?
 

С.

Продвинутый новичок
Чутье мне подсказывает, совсем не по id ему надо выбирать.
 
Сверху