根据指定的日期范围,在另一列中循环生成字符串值

时间:2017-08-01 06:23:21

标签: mysql superset

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

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是另一个。

简而言之,我们希望每周分两批将这些应用程序分组,每月分8批。

  

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

上面的查询可以使用一个月,但是对于一年我会写出100行查询并且不是理想的。我想有一个循环来生成字符串

仅供参考我使用它来显示超集中的数据,目前我只拥有对数据库的只读权限。

how the table should look like

1 个答案:

答案 0 :(得分: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

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