我有一个包含以下列的数据库表commits:

id |作者|姓名|作者|邮箱|作者|日期(时间戳)|

样本内容包括:

1 | abc | abc@xyz.com | 2013-03-24 15:32:49 | 1234
2 | abc | abc@xyz.com | 2013-03-27 15:32:49 | 534
3 | abc | abc@xyz.com | 2014-05-24 15:32:49 | 2344
4 | abc | abc@xyz.com | 2014-05-28 15:32:49 | 7623

我想得到如下结果:

id | name | week | commits
1  | abc  | 1    | 2
2  | abc  | 2    | 0

我在网上搜索了类似的解决方案,但没有找到任何有用的.

我试过这个问题:

SELECT      date_part('week', author_date::date) AS weekly,
        COUNT(author_email)           
FROM        commits
GROUP BY    weekly
ORDER BY weekly

但这不是正确的结果.

推荐答案

如果你有好几年,你也应该考虑这一年.一种方法是:

SELECT date_part('year', author_date::date) as year,
       date_part('week', author_date::date) AS weekly,
       COUNT(author_email)           
FROM commits
GROUP BY year, weekly
ORDER BY year, weekly;

更自然的书写方式是使用date_trunc():

SELECT date_trunc('week', author_date::date) AS weekly,
       COUNT(author_email)           
FROM commits
GROUP BY weekly
ORDER BY weekly;

Sql相关问答推荐

如何从多行数据中获取一行合并数据?

Oracle SQL-将结果列在单行中

计算分段的总权重

使用占位符向SQL INSERT查询添加 case

如何根据给定条件PostgreSQL迭代减少组中的行数

重新组合已排序的日期范围

如何在SQL中更新Json字符串

直接加法(1+1)与聚合函数SUM(1+1)的区别是什么

将两列相加为同一表中的行的查询

比较SQL中以逗号分隔的字符串

Postgresql - WHERE 中的 MAX 标准 - 初学者问题

MySQL中的递归查询邻接表深度优先?

在 R 值的 SQL 块中显示值

如何用SQL组合客户拥有的产品

使用多个数据库调用重载 CQRS 模式

SQL Server - 复杂场景 - 比较状态并填充值到后续行

正则表达式:停在第一个匹配的其中一个字符位置上

Teradata 多个进程的最大进程结束时间捕获

SQL:如何从时间戳数据生成时间序列并计算不同事件类型的累计总和?

SQLite 中的过滤运行总和视图