继我之前的question。关于(另一个)SQL查询的帮助
我有一个名为activity
有2列的表格:
`when` as datetime // last time i saw a user
guid as varchar // a unique identifier for each user
我有一个返回值有多少新用户对于给定的日期和时间跨度的查询:
SET @till_date='2009-11-01'; #for today, give CURDATE()+1
SET @duration=1; # this can be changed to 7, 31, etc
SELECT COUNT(guid) AS total_new_users, DATE_SUB(@till_date, INTERVAL @duration DAY) AS since_date, @till_date AS till_date
FROM `activity` WHERE 1
AND `when` BETWEEN DATE_SUB(@till_date, INTERVAL @duration DAY) AND @till_date
AND guid NOT IN
(
SELECT guid
FROM `activity`
WHERE `when` < DATE_SUB(@till_date, INTERVAL @duration DAY)
)
我想能够构建一个查询,该查询将在给定的时间范围内返回每个日期的新用户列表。这将被用来建立每天的新用户一个月,一周,图表等
事情是这样的:
total_new_users | since_date | till_date
----------------------------------------------
10 | 2009-11-20 | 2009-11-21
10 | 2009-11-21 | 2009-11-22
10 | 2009-11-22 | 2009-11-23
我想过使用UNION
与LOOP
,但我的SQL知识相当基本的,帮助?
结果(感谢@pilcrow):
SET @till_date='2009-11-15';
SET @since_date='2009-11-01';
SELECT first AS yyyymmdd,
COUNT('x') AS new_user_count
FROM (SELECT guid,
DATE(MIN(`when`)) AS first
FROM activity
GROUP BY 1) first_appearance
WHERE first BETWEEN @since_date AND @till_date
GROUP BY 1
你有没有桌子的实际布局? – Suroot 2009-11-24 03:52:14
@Suriit:是的,在我之前的问题中,也加入了这里。 – Amirshk 2009-11-24 03:54:00