使用concat的基于时间的动态列名

mznpcxlj  于 2021-08-01  发布在  Java
关注(0)|答案(1)|浏览(311)

我想这是不可能的,但我很想看看是否有人能证明我错了。我想得到一个查询的输出,该查询使用时间函数和concat来生成输出列的名称。如果这是在代码中生成的,这不会是一个问题,但它的sql输出被发送给分析师,我希望它是尽可能清晰的,他们。

SELECT 
    source_domain,
    sum(IF(created_at BETWEEN now() - INTERVAL 30 MINUTE AND now() - INTERVAL 15 MINUTE,1,0)) concat(now() - INTERVAL 30 MINUTE,'-', now() - INTERVAL 15 MINUTE),
FROM data_set
GROUP BY 1

结果如下:

| source_domain | 2020-06-29 12:00:00 - 2020-06-29 12:15:00 |
+---------------+-------------------------------------------+
| abc.com       | 37
jdgnovmf

jdgnovmf1#

最接近的是name\u const()。但它不会按照您描述的方式工作,因为参数必须是常量字符串,而不是表达式。而且文档上说它只供mysql内部使用,你不应该在应用程序代码中使用这个函数。
不能在一个查询中执行此操作。必须执行一个查询才能生成将用作第二个查询的列标题的字符串:

SELECT CONCAT(NOW() - INTERVAL 30 MINUTE,'-', NOW() - INTERVAL 15 MINUTE);

获取该查询的结果,然后在后续查询中使用它:

SELECT 
    source_domain,
    sum(...yadda yadda...) AS `<alias>`
FROM data_set
GROUP BY 1

你可以在我放置的时间范围内插入字符串 <alias> 上面。与所有标识符一样,在准备查询之前,它必须是sql查询字符串的一部分。

相关问题