【发布时间】:2012-04-05 15:10:11
【问题描述】:
我有一个包含 3 列的表:id、updated_at、click_sum。
许多行具有完全相同的updated_at 值,这使得很难简单地检索数据order by updated_at 并在图表中显示总和。
由于同一日期有多个总和,这会影响图表。
我试图实现的是获得以下输出:
update_at | click_sum
-----------+-----------
date1 | 100
date2 | 3
date3 | 235
date4 | 231
可选地,只有上个月、上一周或上一天AND 的日期,而不仅仅是NOW() - 1 月份的日期。
我构建的当前查询非常大,而且效果不佳。
它按日期分组(没有出现重复的日期)和SUM()s 正确点击,但定义日期的时间(上个月、一周、一天)似乎无法正常工作。
查询:($interval 代表MONTH 或DAY 或SECOND 或WEEK)
SELECT d.updated_at, SUM(d.clicks_sum) AS click_sum
FROM aggregated_clicks d
JOIN
(
SELECT c.id, MAX(StartOfChains.updated_at) AS ChainStartTime
FROM aggregated_clicks c
JOIN
(
SELECT DISTINCT a.updated_at
FROM aggregated_clicks a
LEFT JOIN aggregated_clicks b ON (b.updated_at >= a.updated_at - INTERVAL 1 DAY AND b.updated_at < a.updated_at)
WHERE b.updated_at IS NULL
) StartOfChains ON c.updated_at >= StartOfChains.updated_at
GROUP BY c.id
) GroupingQuery
ON d.id = GroupingQuery.id
WHERE GroupingQuery.ChainStartTime >= DATE_SUB(NOW(), INTERVAL 1 $interval)
GROUP BY GroupingQuery.ChainStartTime
ORDER BY GroupingQuery.ChainStartTime ASC
【问题讨论】:
-
我不明白你想要的结果是什么。你想要每个
id一行吗?每个updated_at一行?再加上,你想要一些东西的总和? -
您能否提供示例数据以产生上述预期输出?谢谢
-
假设
id是唯一的,您想要同一日期的所有实例的click_sum的总和,还是只想要特定日期的“最新”行? -
@MattFenwick 我想要每个唯一的 updated_at 一行 + 具有该 updated_at 的所有 updated_at 行的 SUM(click_sum)