首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取时间间隔计数

获取时间间隔计数
EN

Stack Overflow用户
提问于 2011-09-01 05:55:55
回答 3查看 1.4K关注 0票数 2

我有一个名为Call_Data的表,数据如下:

代码语言:javascript
复制
Arr_Date      Interval    AN_Time    AB_Time
08/08/2011    1600        113        NULL
08/08/2011    1400        317        NULL
08/09/2011    1200        298        NULL
08/09/2011    1000        NULL       194
08/10/2011    1200        256        NULL
08/10/2011    1400        NULL       132

我希望得到如下输出:

代码语言:javascript
复制
Arr_Date    Total_calls  AN_10_min   AN_5_min   AB_10_Min     AB_5_min
08/08/2011   2             2            1             0           0
08/09/2011   2             1            1             1           1
08/10/2011   2             1            1             1           1

逻辑是列AN_Time,AB_Time是以秒为单位。我想计算每列每天在10分钟和5分钟范围内的呼叫数。

我写了这样的东西:

代码语言:javascript
复制
SELECT  ARR_date,
CASE WHEN AN_TIME <300 THEN 1 ELSE 0 END AS AN_5_min ,
case WHEN AN_TIME <600 THEN 1 ELSE 0 END AS AN_10_min,
CASE WHEN AB_TIME <300 THEN 1 ELSE 0 END AS AB_5_min ,
case WHEN AB_TIME <600 THEN 1 ELSE 0 END AS AB_10_min
FROM Call_Data
GROUP BY AR_Date,AN_TIME,AB_TIME

但这并不能告诉我调用的总数。有谁可以帮我?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-09-01 06:00:32

你很接近了:

代码语言:javascript
复制
SELECT  
  ARR_date,
  COUNT(*)  AS Total_calls,
  SUM( CASE WHEN AN_TIME <300 THEN 1 ELSE 0 END )  AS AN_5_min ,
  SUM( CASE WHEN AN_TIME <600 THEN 1 ELSE 0 END )  AS AN_10_min,
  SUM( CASE WHEN AB_TIME <300 THEN 1 ELSE 0 END )  AS AB_5_min ,
  SUM( CASE WHEN AB_TIME <600 THEN 1 ELSE 0 END )  AS AB_10_min
FROM Call_Data
GROUP BY AR_Date

您还可以使用NULLCOUNT来(向任何未来的程序员)显示您实际上是在计算调用次数,而不是求和:

代码语言:javascript
复制
SELECT  
  ARR_date,
  COUNT(*)  AS Total_calls,
  COUNT( CASE WHEN AN_TIME <300 THEN 1 ELSE NULL END )  AS AN_5_min ,
  COUNT( CASE WHEN AN_TIME <600 THEN 1 ELSE NULL END )  AS AN_10_min,
  COUNT( CASE WHEN AB_TIME <300 THEN 1 ELSE NULL END )  AS AB_5_min ,
  COUNT( CASE WHEN AB_TIME <600 THEN 1 ELSE NULL END )  AS AB_10_min
FROM Call_Data
GROUP BY AR_Date
票数 3
EN

Stack Overflow用户

发布于 2011-09-01 06:02:03

你就快到了,只要把这些列加起来就行了。

代码语言:javascript
复制
SELECT
    ARR_date,
    SUM(AN_5_min) AN_5_min,
    SUM(AN_10_min) AN_10_min,
    SUM(AB_5_min) AB_5_min,
    SUM(AB_10_min) AB_10_min
FROM
    (SELECT 
        ARR_date,
        CASE WHEN AN_TIME <300 THEN 1 ELSE 0 END AS AN_5_min,
        case WHEN AN_TIME <600 THEN 1 ELSE 0 END AS AN_10_min,
        CASE WHEN AB_TIME <300 THEN 1 ELSE 0 END AS AB_5_min,
        case WHEN AB_TIME <600 THEN 1 ELSE 0 END AS AB_10_min
    FROM
        Call_Data) TBL
GROUP BY
    ARR_date
票数 2
EN

Stack Overflow用户

发布于 2011-09-01 06:05:00

代码语言:javascript
复制
SELECT Arr_Date, COUNT(*) AS Total_Calls,
  SUM(CASE WHEN AN_TIME <300 THEN 1 ELSE 0 END) AS AN_5_min ,
  SUM(case WHEN AN_TIME <600 THEN 1 ELSE 0 END) AS AN_10_min,
  SUM(CASE WHEN AB_TIME <300 THEN 1 ELSE 0 END) AS AB_5_min ,
  SUM(case WHEN AB_TIME <600 THEN 1 ELSE 0 END) AS AB_10_min
FROM dbo.Call_Data
GROUP BY Arr_Date
ORDER BY Arr_Date;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7263965

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档