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()
、クリックは正しく行われますが、日付がいつ(先月、週、日)から定義されているかは正しく機能していないようです。
クエリ:(またはまたはまたは$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