目前我正面临在Vertica中生成特定开始日期的日期列表的问题。基于这篇文章https://forum.vertica.com/discussion/240532/use-time-series-analytics-to-generate-a-list-of-dates-at-a-specific-start-date,我得到了我想要的数据。但是最近,不知怎么的,我的查询生成了重复的日期(月),最后一个月(三月)完全丢失了。
我查询:
SELECT
LEFT(ADD_MONTHS((EXTRACT (YEAR FROM ts::DATE) || '-' || EXTRACT(MONTH FROM ts::DATE) ||
'-01')::DATE, 1)::varchar, 7) as validity_month
FROM (
SELECT ADD_MONTHS(CURRENT_DATE(), -36)::TIMESTAMP as tm -- take the last 36 months
UNION ALL
SELECT CURRENT_DATE()::TIMESTAMP
) as t TIMESERIES ts as '1 MONTH' OVER (ORDER BY t.tm) -- build a timeseries for every month
截至2023年1月的最后36个月工作良好,并提供了我需要的数据系列。从2023年1月开始,我得到了以下数据:
validity_month | 2023 - 01年的 |
---|
2023 - 01年的 |
2023 - 02年的 |
2023 - 04的 |
2023 - 04的 |
要解决月间隔的问题,请尝试使用TIMESERIES
来获取一系列整数,然后使用CROSS JOIN
来获取该整型列表,并使用ADD_MONTHS()
:
WITH
monthcount(monthcount) AS (SELECT 6) -- take the last 6 months
, lim(dt) AS (
SELECT TRUNC(ADD_MONTHS(CURRENT_DATE(), -monthcount),'MONTH') FROM monthcount
UNION ALL
SELECT TRUNC(CURRENT_DATE(),'MONTH')
)
, ts(ts) AS (
SELECT ts FROM lim
TIMESERIES ts as '1 MONTH' OVER (ORDER BY dt::TIMESTAMP)
)
, i(i) AS ( SELECT ROW_NUMBER() OVER(ORDER BY ts) FROM ts)
, minmonth(minmonth) AS (SELECT MIN(dt) FROM lim)
SELECT
ADD_MONTHS(minmonth,i) AS validity_month
, i
FROM i CROSS JOIN minmonth CROSS JOIN monthcount
WHERE i <= monthcount
ORDER BY 1
;
这是因为,在TIMESERIES
子句中,'1 MONTH'
等同于'30 DAYS'
。查看以下查询(我将表达式固定为返回输入日期之后的第一个月-不要使用字符串操作!)-使用validity_month
的表达式和输入日期值-对于过去6个月:
SELECT
TO_CHAR(ADD_MONTHS(TRUNC(ts,'MONTH'),1),'YYYY-MM') AS validity_month
, ts::DATE AS real_date
FROM (
SELECT ADD_MONTHS(CURRENT_DATE(), -6)::TIMESTAMP as tm -- take the last 6 months
UNION ALL
SELECT CURRENT_DATE()::TIMESTAMP
) as t
-- build a timeseries for every month
TIMESERIES ts as '1 MONTH' OVER (ORDER BY t.tm);
结果:
validity_month | real_date | 2022 - 11 | 2022-10-02 |
---|---|---|
2022 - 12 | 2022-11-01 | |
2022-12-01 | ||
2022-12-31 | ||
2023 - 02年 | 2023-01-30 | |
2023 - 04 | 2023-03-01 | |
2023 - 04 | 2023-03-31 |
相关内容
- r语言 - XML:从XML查询中提取所有时间序列
- 是否有一种方法可以将时间序列数据表重叠到另一个使用sql查询?
- 在psql中查询类似时间序列的计数器
- 如何查询Prometheus中具有一定标签值的所有时间序列?
- PromQL查询,用于检测新时间序列的创建
- 在功率查询编辑器中从表中删除多个时间序列
- 如何正确索引和查询时间序列数据在Postgres?
- 用于时间序列分析的月快照递归雪花查询,删除更改部门的用户更改前的记录
- 似乎不能用新的GridDB Python客户端查询时间序列容器?
- 使用带参数的Pandas从QuestDb查询时间序列
- 基于时间序列数据的SQL查询
- DynamoDB时间序列:查询数据的大时间跨度
- 配置单元中的复杂时间序列查询
- 每个操作类型的复杂时间序列查询时差
- 如何使用grafana和MySQL添加时间序列查询
- ElasticSearch中的聚合时间序列查询
- Mongodb时间序列查询
- "error":在德鲁伊上的时间序列查询中"null exception"
- Couchdb /cloudant时间序列查询
- Postgres中高效的时间序列查询
最新更新
- 函数式语言类型推断混乱
- 使用Python从大文件解析数字数据时提高速度
- 如何从Multipass共享文件夹到主机?
- 从CMD或批处理文件中禁用"Notify me when the clock changes"设置
- 在Dockerfile中设置——net=host ?
- 如何在React中将arrayBuffer转换为JSON
- 是否有可能将html响应转换为json在扑动?
- 快速过滤numpy数组值的方法
- C保存字符串的数组列表
- 需要minio film配置建议
- 如何应用CSS字体大小"relative to what it would be originally"?
- 该应用程序在个人帐户中未绑定脚本时被阻止错误
- 将原始查询转换为django orm
- 如何从出现次数和值的列表中创建一个新列表
- 使用Julia中的Julia Broadcasting根据数组的索引计算数组值
- 在javascript中使用条件更新嵌套数组
- for循环多个条件
- 将第一列中的名称行转换为r中的列
- Nx张量的映射切片
- Dotnet Core Azure功能(隔离进程)如何加载应用程序.每个环境的Json
- Discordjs不发送消息
- 边框在css中不显示
- Python pandas中的深度嵌套JSON规范化
- 如何在JSON模式中从正确的对象中选择特定的字段
- 我可以在REST API中直接通过POST发送电话号码吗?
- "onPressed: () {}"在颤振中不起作用
- FbLitho在RecyclerCollectionComponent中重复视图,即使加载了新部分
- Spring Data JPA对多对多关系的查询返回所有记录,而不是匹配的记录
- 在使用const断言递归时更改函数参数以接受子函数
- 我们可以通过调用Power BI Service/Workspace的export功能导出嵌入式Power BI报表的P
热门标签:
javascript python java c# php android html jquery c++ css ios sql mysql arrays asp.net json python-3.x ruby-on-rails .net sql-server django objective-c excel regex ruby linux ajax iphone xml vba spring asp.net-mvc database wordpress string postgresql wpf windows xcode bash git oracle list vb.net multithreading eclipse algorithm macos powershell visual-studio image forms numpy scala function api selenium