sql - 如何在 Presto SQL 中制作动态日期
问题描述
我想制作一个指标数据检查表 - 下面是我现在所拥有的。我希望自动化部分“2021-04-30”,所以每次运行逻辑时,它都会动态更改为每个月的最后一天。(从 2021-01-31、2021-02-28、2021-03-31、......)
CREATE TABLE data_check_result AS
WITH day_count AS (
SELECT day(date '2021-04-30' - date '2020-01-01') AS ideal_days
)
, metric AS (
SELECT country
, day(max(datepartition)- date '2020-01-01') AS actual_has_days
FROM table
GROUP BY 1
)
SELECT date '2021-04-30' AS report_period
, country
, 'metric_a' AS metric_name
, CASE WHEN metric.actual_has_days = day_count.ideal_days THEN 'YES' ELSE 'NO' END AS data_passed
FROM day_count
JOIN metric
ON 1=1
;
理想输出表
report_period country metric_name data_passed
2021-04-30 Australia metric_a YES
2021-04-30 Canada metric_a NO
2021-04-30 China metric_a YES
2021-03-31 US metric_a NO
2021-03-31 Canada metric_a YES
....
解决方案
您可以使用该last_day_of_month
函数获取每个月的最后一天:
SELECT last_day_of_month(date('2021-' || cast(month as varchar) || '-01'))
FROM UNNEST(sequence(1,12)) t(month)
=>
_col0
------------
2021-01-31
2021-02-28
2021-03-31
2021-04-30
2021-05-31
2021-06-30
2021-07-31
2021-08-31
2021-09-30
2021-10-31
2021-11-30
2021-12-31
(12 rows)
您可以以这种方式将它们放在一起(未经验证,但它应该是一个好的开始):
CREATE TABLE data_check_result AS
WITH metric AS (
SELECT country
, day(max(datepartition)- date '2020-01-01') AS actual_has_days
FROM table
GROUP BY 1
),
last_days_of_month AS (
SELECT last_day_of_month(date('2021-' || cast(month as varchar) || '-01')) last_day
FROM UNNEST(sequence(1,12)) t(month)
)
SELECT
last_day AS report_period
, country
, 'metric_a' AS metric_name
, CASE WHEN metric.actual_has_days = day_count.ideal_days THEN 'YES' ELSE 'NO' END AS data_passed
FROM metric
CROSS JOIN (
SELECT last_day, day(last_day - date '2020-01-01') AS ideal_days
FROM last_days_of_month
)
推荐阅读
- joomla - 无法访问 joomla 3.9.3 中的用户对象
- java - Checkstyle 检查失败。如何为参数列表记录列表编写文档?
- html - CSS - 将元素宽度设置为特定的内部内容?
- javascript - 如何使用javascript对gridview行中的文本框求和?
- casting - 为什么找不到 dyn Any 类型的 downcast_ref 方法?
- python-3.x - 使用 Python Boto3 AWS Lambda,S3 Key LastModified 以两种不同的方式返回两种类型
- php - 如何将立即购买按钮添加到具有隐藏添加到购物车按钮的产品中?
- python - Kafka 消费者应该是 Django Web 层的一部分还是单独的服务?
- python - Maxout 激活函数 - 在 NumPy 中实现前向和反向传播
- mysql - 我在查询生成器 SYMFONY 中有问题