假设这张table的最后7天:
Userid Download time
Rab01 2020-04-29 03:28
Klm01 2020-04-29 04:01
Klm01 2020-04-30 05:10
Rab01 2020-04-29 12:14
Osa_3 2020-04-25 09:01
以下是所需的输出:
Count Download_time
1 2020-04-25
2 2020-04-29
1 2020-04-30
2条答案
按热度按时间ltqd579y1#
用postgresql测试。您还标记了redshift,它在postgres8.2上分叉,很久以前。可能有差异。。
既然您似乎对标准iso格式很满意,那么迄今为止的简单转换将是最有效的:
db<>在这里摆弄
CURRENT_DATE
是标准sql,适用于postgres和redshift。相关:如何使用postgresql确定上个月的最后一天?
关于“最后7天”:我用了整整7天的时间(不包括今天——不一定是完整的),语法上可以使用一个简单的索引
(download_time)
. 相关:获取日期范围内一周中某一天的日期
带时间间隔的cte慢速左连接
带两个参数的postgresql中的间隔(天)
理想情况下,你有一个综合指数
(download_time, userid)
(并满足一些前提条件)以获得非常快速的仅索引扫描。请参见:复合索引也适用于第一个字段的查询吗?
count(DISTINCT ...)
速度通常很慢。对于有许多副本的大表,有更快的技术。如果需要优化性能,请公开确切的设置和基数。如果实际数据类型为
timestamptz
,不仅仅是timestamp
,您还需要定义定义日边界的时区。请参见:在rails和postgresql中完全忽略时区
关于可选短语法
GROUP BY 2
:按组选择每组中的第一行?
关于标识符的大写:
postgresql列名是否区分大小写?
vhmi4jdf2#
你可以用
date_trunc
函数用于从datetime中获取仅限日期的部分,并将其用于分组。下一个查询可能是:
小提琴