【发布时间】:2016-08-21 03:17:49
【问题描述】:
请原谅一个新手问题。我是 postgresql 新手。
我有一个充满交易信息的数据库。我的目标是遍历自第一次交易以来的每一天,并显示当天或前 30 天内有多少独立用户进行了购买。
因此,2016 年 2 月 1 日的唯一身份用户数应该显示从 2016 年 1 月 1 日到 2016 年 2 月 1 日的所有唯一身份用户。 2016 年 2 月 2 日的唯一身份用户数应显示 2016 年 1 月 2 日至 2016 年 2 月 2 日的所有唯一身份用户。
这里有一些示例数据:http://sqlfiddle.com/#!15/b3d90/1
结果应该是这样的:
December 17 2014 -- 1
December 18 2014 -- 2
December 19 2014 -- 3
...
January 13 2015 -- 16
January 19 2015 -- 15
January 20 2015 -- 15
...
我想出的最好的如下:
SELECT
to_char(S.created, 'YYYY-MM-DD') AS my_day,
COUNT(DISTINCT
CASE
WHEN S.created > S.created - INTERVAL '30 days'
THEN S.user_id
END)
FROM
transactions S
GROUP BY my_day
ORDER BY my_day;
如您所见,我不知道如何引用第一列中存在的内容来指定过滤器中应包含的日期范围。
任何帮助将不胜感激!
【问题讨论】:
-
你能在sqlfiddle.com上添加架构和一些示例数据吗?
-
@MarekSkiba 刚刚添加。如果可以,请尝试一下!谢谢!
标签: sql-server postgresql