你能帮我让这个查询正常工作吗?
我有一个日志查询,它按天(表:log,包括没有行的天数)计算每个活动用户(表:user,状态:1 (表示活动))的已记录项目(表:calendar )。
以下查询需要10分钟才能运行!如何在几秒而不是几分钟内运行此程序?
SELECT
c.day, COUNT(u.id) AS count
FROM calendar c
LEFT JOIN log l
ON c.day = DATE_FORMAT(l.db_timestamp , '%Y-%m-%d')
LEFT JOIN user u
ON l.user_id = u.id
AND u.user_status_type_id = 1
WHERE
c.day > '2012-12-01'
AND c.day < '2013-01-01'
GROUP BY
c.day表结构:
calendar (~3,000 rows)
day
===============================
2012-01-01
2012-01-02
2012-01-03
...
2020-01-01
log (~30,000 rows)
id user_id db_timestamp
================================
1 1 2012-01-01 01:01:01
1 2 2012-01-01 01:01:01
1 1 2012-01-01 01:01:01
user (~3,000,000 rows)
id user_status_type_id
================================
1 1
1 0结果应如下所示:
Sample Expected Results
day count
=================
2012-12-01 1
2012-12-02 0
2012-12-03 4
...
2012-12-31 0不幸的是,它需要永远运行。我接下来该怎么办?
发布于 2012-12-10 22:07:47
对于您选择的列,您不需要任何连接。使用以下sql
SELECT DATE_FORMAT(l.db_timestamp , '%Y-%m-%d') AS days, COUNT(l.id) AS COUNT
FROM LOG l
WHERE
DATE_FORMAT(l.db_timestamp , '%Y-%m-%d') > '2012-12-01'
AND DATE_FORMAT(l.db_timestamp , '%Y-%m-%d') < '2013-01-01'
GROUP BY days对于用户智能计数
使用
GROUP BY days, l.user_id发布于 2012-12-10 20:12:17
尝试此操作::在加入时使用DATE()
SELECT
c.day, COUNT(u.id) AS count
FROM calendar c
LEFT JOIN log l
ON c.day = DATE(l.db_timestamp)
LEFT JOIN user u
ON l.user_id = u.id
AND u.user_status_type_id = 1
WHERE
c.day between '2013-01-01'
AND '2012-12-01'
GROUP BY
c.dayhttps://stackoverflow.com/questions/13800663
复制相似问题