0

我正在处理客户应用程序数据,我想要的是根据创建应用程序的日期范围对这些应用程序进行分组。

SELECT 
  applications.customer_id, 
  applications.Created_at,
  CASE
    WHEN ((applications.created_at) BETWEEN '2017-07-17T00:00:00' AND '2017-07-20T23-59-59') THEN 'Batch 1'
    WHEN ((applications.created_at) BETWEEN '2017-07-21T00:00:00' AND '2017-07-24T23-59-59') THEN 'Batch 2'
    WHEN ((applications.created_at) BETWEEN '2017-07-25T00:00:00' AND '2017-07-27T23-59-59') THEN 'Batch 3'
    WHEN ((applications.created_at) BETWEEN '2017-07-28T00:00:00' AND '2017-07-31T23-59-59') THEN 'Batch 4'
    ELSE 'unknown'
  END AS Batch

基本上每个

每周二@ 00:00:00 至周四 23:59:59

是一批,并且

星期五 00:00:00 到星期一 23:59:59 是另一个。

简而言之,我们希望将此应用程序分为每周 2 批和每月 8 批。

示例:Jan-Batch1..,2,3,4,5,6,7,8 ||| Feb-Batch1..,2,3,4,5,6,7,8 等等

上面的查询一个月没问题,但一年我会写 100 行查询,并不理想。我想要一个循环来生成字符串

仅供参考,我使用它来可视化超集中的数据,目前我只有对数据库的只读访问权限。

桌子应该是什么样子

4

1 回答 1

0

您可以创建一个日历表,对要在查询中检查的所有开始/结束时间戳对进行硬编码。该表看起来像这样:

table: intervals
start                 | end
'2017-07-17T00:00:00' | '2017-07-20T23-59-59'
'2017-07-21T00:00:00' | '2017-07-24T23-59-59'
'2017-07-25T00:00:00' | '2017-07-27T23-59-59'
'2017-07-28T00:00:00' | '2017-07-31T23-59-59'

SELECT
    t1.start,
    t1.end,
    COUNT(t2.customer_id) AS num_applications
FROM intervals t1
LEFT JOIN applications t2
    ON t2.created_at BETWEEN t1.start AND t1.end
GROUP BY t1.start, t1.end

这将为您提供每个范围以及在该范围内打开应用程序的客户数量。

于 2017-08-01T06:34:56.363 回答