Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 查找客户每月满足或超过请求的时间_Sql_Dremel - Fatal编程技术网

Sql 查找客户每月满足或超过请求的时间

Sql 查找客户每月满足或超过请求的时间,sql,dremel,Sql,Dremel,我有一个有客户的表,我想知道客户在哪个月满足或超过了一定数量的请求 该表具有每个请求的customer_id时间戳 我要查找的是客户满足或超过10000个请求的月份(或日期)。我已经试着得到一个总的地方,但这只是不适合我。我把它留在了代码里,以防有人知道我怎么做 我所拥有的是: SELECT customer_id , DATE_TRUNC(CAST(TIMESTAMP_MILLIS(created_timestamp) AS DATE), MONTH) as cM

我有一个有客户的表,我想知道客户在哪个月满足或超过了一定数量的请求

该表具有每个请求的customer_id时间戳

我要查找的是客户满足或超过10000个请求的月份(或日期)。我已经试着得到一个总的地方,但这只是不适合我。我把它留在了代码里,以防有人知道我怎么做

我所拥有的是:

SELECT 
       customer_id
       , DATE_TRUNC(CAST(TIMESTAMP_MILLIS(created_timestamp) AS DATE), MONTH) as cMonth
       , COUNT(created_timestamp) as searchCount
--     , SUM(COUNT (DISTINCT(created_timestamp))) OVER (ROWS UNBOUNDED PRECEDING) as RunningTotal2
FROM customer_requests.history.all
GROUP BY distributor_id, cMonth
ORDER BY 2 ASC, 1 DESC;
我要找的代表是这样的

customer    requests    cMonth       totalRequests
cust1       6000         2017-10-01  6000
cust1       4001         2017-11-01  10001
cust2       4000         2017-10-01  4000
cust2       4000         2017-11-01  8000
cust2       4000         2017-12-01  12000
cust2       3000         2017-12-01  3000
cust2       3000         2017-12-01  6000
cust2       3000         2017-12-01  9000
cust2       3000         2017-12-01  12000

假设使用SQL Server,请尝试此操作(调整顶部的截止值以获得所需的事务数;现在它将查找每个客户的第千个事务)

请注意,这不会返回未超过您的截止日期的客户,并且假设每个交易都有一个唯一的日期(或者如果在日期上可能有联系,则会发出一个顺序ID号以中断联系)

工作原理:

row_number
按客户交易的顺序为每个交易分配唯一的顺序标识符
count
告诉您一个人进行的交易总数(再次假设每个交易有一条记录-否则您需要单独计算,因为
distinct
无法与
分区一起工作)

然后,第二个
选择
返回每个客户的第1000行(或您指定的数量)及其日期,以及该客户的总数。

这是我的解决方案

SELECT
  customerid
 ,SUM(requests) sumDay
 ,created_timestamp
FROM yourTable
GROUP BY 
  customerid,
  created_timestamp
HAVING SUM(requests) >= 10000;
这很简单。您只需根据需要分组,汇总请求并选择符合HAVING子句的行。
您可以尝试该查询。

如果您想要累计总和,可以使用窗口函数。在标准SQL中,如下所示:

SELECT customer_id, 
       DATE_TRUNC(CAST(TIMESTAMP_MILLIS(created_timestamp) AS DATE), MONTH) as cMonth
       COUNT(*) as searchCount,
       SUM(COUNT(*)) OVER (ORDER BY MIN(created_timestamp) as runningtotal
FROM customer_requests.history.all
GROUP BY distributor_id, cMonth
ORDER BY 2 ASC, 1 DESC;

什么版本的SQL?小姐,我的,其他人?我也没有看到where子句?如果你只想要超过某个数字的,你需要将其添加到where Caluse请标记你的数据库嗨,为什么不尝试按客户和日期分组,汇总请求并添加having子句,在其中过滤汇总的请求。您还可以使用MIN来避免每个客户和每天的结果行数超过个。您真的在使用Dremel或BigQuery吗?假设不使用SQL server。
SELECT customer_id, 
       DATE_TRUNC(CAST(TIMESTAMP_MILLIS(created_timestamp) AS DATE), MONTH) as cMonth
       COUNT(*) as searchCount,
       SUM(COUNT(*)) OVER (ORDER BY MIN(created_timestamp) as runningtotal
FROM customer_requests.history.all
GROUP BY distributor_id, cMonth
ORDER BY 2 ASC, 1 DESC;