sql-server - MSSQL根据时间差计算项目数

标签 sql-server t-sql sql-server-2012

我有一个信息表(tbl_results),如下所示:

name  | time_in_minutes
-------------
jonny | 14
jonny | 27
jonny | 28
jonny | 56
jonny | 57
jonny | 58
sarah | 12
sarah | 16
sarah | 17
sarah | 24
sarah | 25

我很想知道如何编写一个查询(也许是交叉连接?),它总结了特定时间段内的次数。对于上面的示例,我将使用 10 分钟的计时。所以结果如下。

name  | 0-10 | 11-20 | 21-30 | 31-40 | 41-50 | 51-60
jonny |   0  |   1   |   2   |   0   |   0   |   3
sarah |   0  |   3   |   2   |   0   |   0   |   0 

我会编写一些代码,但我真的不知道从哪里开始这样的查询。

最佳答案

使用条件聚合:

SELECT
    name,
    [0-10]  = COUNT(CASE WHEN time_in_minutes BETWEEN 0 AND 10 THEN 1 END),
    [11-20] = COUNT(CASE WHEN time_in_minutes BETWEEN 0 AND 10 THEN 1 END),
    [21-30] = COUNT(CASE WHEN time_in_minutes BETWEEN 0 AND 10 THEN 1 END),
    [31-40] = COUNT(CASE WHEN time_in_minutes BETWEEN 0 AND 10 THEN 1 END),
    [41-50] = COUNT(CASE WHEN time_in_minutes BETWEEN 0 AND 10 THEN 1 END),
    [51-60] = COUNT(CASE WHEN time_in_minutes BETWEEN 0 AND 10 THEN 1 END)
FROM tbl
GROUP BY name

关于sql-server - MSSQL根据时间差计算项目数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40834588/

相关文章:

sql-server - 删除两个表中 'equivalent'的数据

带有 SQL Server 2012 的 Java Hibernate 不工作?

sql - 在列的一部分上应用 group by 并得到矛盾

sql - NOLOCK 和 UNCOMMITTED 之间有什么区别

sql-server - 死锁:键锁资源列表中的属性模式与所有者列表模式不同

sql - 将索引列添加到 SQL Server View 的最佳方法是什么?

sql-server - SQL 递归 CTE - 保留对父级的引用

c# - C#中如何从数据库获取数据并将其放入变量中?

SQL Server 首先选择

sql-server - DATEADD(day, -7, GETDATE()) - 是否考虑了时间?