我制作了一个不和谐的机器人,在下表中记录了成员的贡献/帖子。
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()或类似的函数,这些函数或功能不会让我得到其余数据,即使阅读文档后,我也仍在努力进行查询。 / p>
谢谢您的建议!
答案 0 :(得分:1)
当前一周使用:
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;