如何确定 Presto 一个月中的天数?
How to determine number of days in a month in Presto?
我有日期、用户 ID 和金额的数据。我想计算总和(金额)除以每个月的总天数。决赛将按月进行。
我的table是这样的
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
目前我正在使用此解决方案的案例。有什么更好的方法吗?
从 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
with EXTRACT
:
date_trunc('month', date_value))
给出月初,而date_add('month', 1, date_trunc('month', date_value))
给出下个月的月初
- 减去
date
值 returns 和 interval day to second
EXTRACT(DAY FROM interval)
returns 间隔的天数部分。您还可以使用 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)
我有日期、用户 ID 和金额的数据。我想计算总和(金额)除以每个月的总天数。决赛将按月进行。
我的table是这样的
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
目前我正在使用此解决方案的案例。有什么更好的方法吗?
从 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
with EXTRACT
:
date_trunc('month', date_value))
给出月初,而date_add('month', 1, date_trunc('month', date_value))
给出下个月的月初- 减去
date
值 returns 和interval day to second
EXTRACT(DAY FROM interval)
returns 间隔的天数部分。您还可以使用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)