Выберите последнюю запись столбца с group_by

0

У меня есть таблица вроде этого:

----------------------------------
| 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?

Теги:

3 ответа

1
Лучший ответ

Другой подход с использованием строковой функции

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 

DEMO

  • 0
    Большое спасибо, это то, что мне нужно (у)
2
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

http://sqlfiddle.com/#!9/b66e02/20

1

Попробуйте использовать

select max(page_likes) as page_likes

в блоке выбора

  • 0
    Спасибо, но это пойдет не так, если на следующий день кому-то не понравится

Ещё вопросы

Сообщество Overcoder
Наверх
Меню