Та же таблица, группировка по типу, максимальная дата, разница в 2 строки

Как я могу это сделать? У меня есть этот стол

╔════════╦══════════╦══════════╗
║ item   ║ price    ║ date     ║
╠════════╬══════════╬══════════╣
║ Dollar ║       60 ║ 1.3.2016 ║
║ Dollar ║       50 ║ 2.3.2016 ║
║ Bound  ║      100 ║ 1.3.2016 ║
║ Bound  ║      110 ║ 2.3.2016 ║
║ Euro   ║      600 ║ 1.3.2016 ║
║ Euro   ║      580 ║ 3.3.2016 ║
╚════════╩══════════╩══════════╝

Выходные данные должны отображать по одному элементу от каждого типа, причем последняя цена зависит от последней даты и отличается от предыдущей строки, например:

╔════════╦══════════╦════════════════════════╗
║ item   ║ price    ║ date     ║ differnece  ║
╠════════╬══════════╬════════════════════════╣
║ Dollar ║       50 ║ 2.3.2016 ║   -10       ║
║ Bound  ║      110 ║ 2.3.2016 ║    10       ║
║ Euro   ║      580 ║ 3.3.2016 ║   -20       ║
╚════════╩══════════╩════════════════════════╝

Я сделал это…


SELECT item,date,price FROM wpdatatable_23 WHERE date IN (SELECT max(date) FROM wpdatatable_23 GROUP BY item LIMIT 0,1) group by item

…и работает нормально. Я просто не знаю, как сделать разницу, любая помощь?

4

Решение

Вы можете рассчитать разницу, используя коррелированный подзапрос:

SELECT item, `date`, price,
price - (SELECT price
FROM wpdatatable_23 AS t2
WHERE t2.item = t1.item AND t2.`date` < t1.date
ORDER BY t2.`date` DESC LIMIT 0,1) AS difference
FROM wpdatatable_23 AS t1
WHERE date IN (SELECT max(date)
FROM wpdatatable_23
GROUP BY item )
4

Другие решения

Проверьте это (небольшая модификация Giorgos SQL):

SELECT
a.item,
a.`date`,
a.price,
a.price  - (SELECT price
FROM prices AS t2
WHERE t2.item = a.item AND t2.`date` < a.`date`
ORDER BY t2.`date` DESC LIMIT 0,1) as diff
FROM
prices AS a
WHERE
a.date = (SELECT MAX(date) FROM prices b WHERE b.item = a.item GROUP BY item);
0

По вопросам рекламы [email protected]