我正在开发一个将在aws quicksight上运行的查询,从aws athena每月的数据库中获取信息(上个月的第一天到上个月的最后一天)。
为了做到这一点,我设置了一个时间间隔,让查询从athena获取日期,并在where子句中使用它,如下所示:
SELECT
date_format(date_parse(REPLACE(eventtimestamp, ' ', ' 0'), '%a %b %d %T %Y'), '%Y-%m') AS month,
COUNT(DISTINCT(SUBSTR(UPPER(REPLACE(REPLACE(r.stationid, ':', ''), '-', '')),1, 12))) as qty_uniq_aps,
count(*) AS qtd_of_sessions
FROM example.tableexample_parquet r
WHERE r.dt >= from_iso8601_date(CONCAT(CAST(extract(year FROM current_date) AS varchar(4)),
'-',
CAST(extract(month FROM current_date) AS varchar(2)),
'-01'
))
GROUP BY 1
ORDER BY 1;
看:
WHERE r.dt >= from_iso8601_date(CONCAT(CAST(extract(year FROM current_date) AS varchar(4)),
'-',
CAST(extract(month FROM current_date) AS varchar(2)),
'-01'
))
这是一个示例:此代码将采用实际年-实际月-月的第一天的间隔,如下所示:
2020-07-01>=数据库中最新的注册表
我真的很想让它变聪明。我想把它转换成where子句中的between,比如:
WHERE r.dt BETWEEN actual_year-last_month-first_day_of_month AND actual_year-last_month-last_day_of_month
问题是:a)一个月的最后一天会因月份而异(例如,有些月份有30天,有些月份有31天,另一些月份有28天或29天)。b) 我在这个链接中找到了一个名为last\ day\ of\ month(x)的函数https://prestosql.io/docs/current/functions/datetime.html 但不是在为雅典娜工作。
我想问你一些关于如何解决这个问题的想法。我在prestodb docs中搜索了与日期和时间相关的函数,但我不知道如何在没有月的最后一天(x)的情况下实现这一点。即使有了这个答案,我也可以使用带有r.dt>=the first day of last month的where子句,并在每月的第一天运行quicksight查询。但我正在寻找一个解耦的解决方案。谢谢!
1条答案
按热度按时间b4qexyjb1#
如果你真的想查询整个月,你只需要比较年和月(根本不需要知道天),所以你应该比较年和月的“字符串”,并且确保月总是两位数(例如。
07
). 这将完成以下工作:如果您想在上个月运行查询,但您现在已经在新的月份中,您应该从当前时间中减去一些天来获得上个月(如果您在一年的最后一个月,则可能是一年…)。
所以
current_date
写: