2015-02-20 3 views
1

У нас есть таблица, которая вставляет строку каждый день и обновляет ее данными.mySQL SUM и заказ

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

SELECT SUM(`total_clicks`) AS clicks, `last_updated` FROM `reporting` WHERE `unique_id` = 'xH7' ORDER BY `last_updated` DESC 

При извлечении этой информации из базы данных, она тянет правильное общее количество кликов, но LAST_UPDATED поля из первая строка (вчера), а не новая строка, вставленная сегодня.

Как я могу получить последнее последнее заполненное поле?

ответ

2

Если вы хотите самую последнюю дату, используйте MAX, чтобы выбрать его:

SELECT SUM(total_clicks) as clicks, MAX(last_updated) AS last_updated 
FROM reporting 
WHERE unique_id = 'xH7' 

Проблема с версией является то, что ORDER BY происходит после агрегирования и агрегации выбирает не-агрегатные столбцы из произвольных строк стол.

+0

Отличное спасибо! Принят, когда смогу! –

1

Если у вас есть только одна строка в день, то вам не нужно sum(). Делают ли то, что вы хотите?

SELECT `total_clicks` AS clicks, `last_updated` 
FROM `reporting` 
WHERE `unique_id` = 'xH7' 
ORDER BY `last_updated` DESC 
LIMIT 1; 

Ваш запрос представляет собой запрос агрегирования, который суммирует все клики в таблице. Поскольку он возвращает только одну строку, order by ничего не делает.

+0

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