仅从当前一周获取记录

时间:2019-11-30 03:07:24

标签: sql postgresql

我制作了一个不和谐的机器人,在下表中记录了成员的贡献/帖子。

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天为间隔进行获取,而不是获取当前周,因此它是在获取前一周的数据。

Small drawing to explain better

我得到的结果像红线一样,但是我希望视图像绿色的线一样。

我做了一些研究,但是大多数帖子会建议使用date_trunc()或类似的函数,这些函数或功能不会让我得到其余数据,即使阅读文档后,我也仍在努力进行查询。 / p>

谢谢您的建议!

1 个答案:

答案 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;