У меня есть таблица вроде этого:
----------------------------------
| post | page_likes | created_at |
----------------------------------
| 2 | 700 | 2017-11-02 |
----------------------------------
| 1 | 702 | 2017-11-03 |
----------------------------------
| 4 | 709 | 2017-11-04 |
----------------------------------
| 2 | 712 | 2017-11-05 |
----------------------------------
| 0 | 710 | 2017-11-06 |
И запрос для расчета данных и использования его для моей диаграммы
SELECT DATE_FORMAT(created_at, '%Y%m') as ymd_id,
page_likes AS page_likes,
sum(post) AS total_posts
FROM table
Where created_at BETWEEN '2017-11-02 00:00:00' AND '2017-11-6 00:00:00'
GROUP BY ymd_id
ORDER BY ymd_id ASC
Результат:
---------------------------------------
|total_posts| page_likes | ymd_id |
---------------------------------------
| 9 | 700 | 201711 |
---------------------------------------
page_like идет не так. Он занимает 700, но значение, которое я хочу, - 710.
Есть ли способ изменить запрос выше, чтобы получить последнюю строку page_like?
Другой подход с использованием строковой функции
SELECT
DATE_FORMAT(created_at, '%Y%m') AS ymd_id,
SUBSTRING_INDEX(GROUP_CONCAT(page_likes ORDER BY created_at DESC),',',1) AS page_likes,
SUM(post) AS total_posts
FROM
demo
WHERE created_at >= '2017-11-02 00:00:00'
AND created_at <= '2017-11-6 00:00:00'
GROUP BY ymd_id
ORDER BY ymd_id ASC
SELECT tt.ymd_id, test.page_likes, tt.total_posts FROM (
SELECT DATE_FORMAT(created_at, '%Y%m') as ymd_id, MAX(created_at) as created_at, sum(post) AS total_posts
FROM test
Where created_at BETWEEN '2017-11-02 00:00:00' AND '2017-11-6 00:00:00'
GROUP BY ymd_id
ORDER BY ymd_id ASC) as tt
join test on test.created_at = tt.created_at
SQL FIDDLE
Попробуйте использовать
select max(page_likes) as page_likes
в блоке выбора