提问人:justnewbie89 提问时间:9/10/2019 最后编辑:Piotr Findeisenjustnewbie89 更新时间:3/7/2021 访问量:4081
如何确定 Presto 一个月的天数?
How to determine number of days in a month in Presto?
问:
我有包含日期、用户 ID 和金额的数据。我想计算每个月的总和(金额)除以总天数。决赛将每月举行一次。
我的表格是这样的
date userid amount
2019-01-01 111 10
2019-01-15 112 20
2019-01-20 113 10
2019-02-01 114 30
2019-02-15 111 20
2019-03-01 115 40
2019-03-23 155 50
期望的结果是这样的
date avg_qty_sol
Jan-19 1.29
Feb-19 1.79
Mar-19 2.90
avg_qty_sold来自相应月份的总和(金额)/总天数 例如,2019 年 1 月的总金额为 40 天,1 月的总天数为 31 天。所以avg_qty_sold是 40/31
目前我使用此解决方案时的情况。有没有更好的方法?
答:
4赞
Piotr Findeisen
9/10/2019
#1
从 Presto 318 开始,您只需:
SELECT day(last_day_of_month(some_date))
查看 https://trino.io/docs/current/functions/datetime.html#last_day_of_month
在 Presto 318 之前,您可以将 date_trunc
与 EXTRACT
结合使用:
date_trunc('month', date_value))
给出月初,而给出下个月的月初date_add('month', 1, date_trunc('month', date_value))
- 减去值返回一个
date
interval day to second
EXTRACT(DAY FROM interval)
返回间隔的天部分。您也可以使用便利功能代替 .语法更详细,更标准。day
EXTRACT(DAY FROM ...)
EXTRACT
presto:default> SELECT
-> date_value,
-> EXTRACT(DAY FROM (
-> date_add('month', 1, date_trunc('month', date_value)) - date_trunc('month', date_value)))
-> FROM (VALUES DATE '2019-01-15', DATE '2019-02-01') t(date_value);
date_value | _col1
------------+-------
2019-01-15 | 31
2019-02-01 | 28
(2 rows)
不太自然,但更短的替代方案是获取给定月份最后一天的日期编号:day(date_add('day', -1, date_add('month', 1, date_trunc('month', date_value))))
presto:default> SELECT
-> date_value,
-> day(date_add('day', -1, date_add('month', 1, date_trunc('month', date_value))))
-> FROM (VALUES DATE '2019-01-15', DATE '2019-02-01') t(date_value);
date_value | _col1
------------+-------
2019-01-15 | 31
2019-02-01 | 28
(2 rows)
评论
0赞
Piotr Findeisen
9/13/2019
@muhnandap我找到了一个更短的替代方案并更新了答案。
评论