sql - 仅从本周获取记录
问题描述
我制作了一个不和谐的机器人,我在下表中记录了数据库中成员的贡献/帖子。
CREATE TABLE IF NOT EXISTS posts (
id integer GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
...
post_date timestamptz NOT NULL DEFAULT CURRENT_TIMESTAMP
);
在每周结束时,我会手动运行一个命令来获取贡献更多的成员,这样我就可以给他/她一个奖励。为此,我创建了以下视图表,该表运行良好,因为它仅供个人使用,而且我每周都在同一日期进行。
CREATE VIEW vw_posts AS
SELECT guild_id, account_id, COUNT(*) AS posts
FROM public.posts
WHERE post_date > CURRENT_TIMESTAMP - INTERVAL '1 week'
GROUP BY(guild_id, account_id)
ORDER BY posts DESC;
现在我正在执行一个新命令来显示每周排行榜。因此,在创建命令后,我很快意识到我的视图是以 7 天的间隔获取而不是获取当前周,因此它是从前一周获取数据。
我得到了像红线一样的结果,但我希望视图充当绿线。
我做了一些研究,但大多数帖子都建议使用 date_trunc() 或类似的函数,这些函数不会让我得到其余的数据,即使在阅读了文档之后,我也肯定很难进行查询。
感谢您的任何建议!
解决方案
对于本周使用:
CREATE VIEW vw_posts AS
SELECT guild_id, account_id, COUNT(*) AS posts
FROM public.posts
WHERE post_date >= DATE_TRUNC('week', CURRENT_TIMESTAMP)
GROUP BY guild_id, account_id
ORDER BY posts DESC;
前一周:
CREATE VIEW vw_posts AS
SELECT guild_id, account_id, COUNT(*) AS posts
FROM public.posts
WHERE post_date >= DATE_TRUNC('week', CURRENT_TIMESTAMP) - INTERVAL '1 week' AND
post_date < DATE_TRUNC('week', CURRENT_TIMESTAMP)
GROUP BY guild_id, account_id
ORDER BY posts DESC;
推荐阅读
- python - python - 在矩阵中添加相邻行的组合
- cron - 使用 Cron 作业重新启动 php-fpm
- flume - Cygnus 订阅错误请求
- python - Dataframe.iterrows() 或 Dataframe.itertuples() 的替代品?
- python-3.x - 在 Python3 中一一打印字典键和值在同一行
- batch-file - 从 cmd 调用 InterSystem Cache.exe
- wordpress - Wordpress 重定向到类似的链接
- spring - 官方示例中的 Spring ServletRegistrationBean 问题
- r - Tidyeval:将列列表作为 quosure 传递给 select()
- mysql - 在 MySQL 中强制区分大小写的问题