在不指定初始和结束日期的情况下编写每月查询的自动方式?

Posted

技术标签:

【中文标题】在不指定初始和结束日期的情况下编写每月查询的自动方式?【英文标题】:automatic way to write monthly queries without specifying init and end date? 【发布时间】:2017-06-21 08:13:21 【问题描述】:

我需要使用旧版 SQL 语言自动执行每月查询的日期范围。

使用此代码,Google Bigquery 不会从月初到月底(5 月 1 日至 5 月 31 日)存储数据表。

FROM TABLE_DATE_RANGE([99999999.ga_sessions_],
             DATE_ADD(CURRENT_TIMESTAMP(),-30,'DAY'),
             DATE_ADD(CURRENT_TIMESTAMP(),-1,'DAY'))

【问题讨论】:

【参考方案1】:

在 MSsql 中制作(它不漂亮,但我认为你会赶上漂移)

select cast('01.'+cast(Month(CURRENT_TIMESTAMP) as nvarchar)+'.'+cast(Year(CURRENT_TIMESTAMP) as nvarchar) as Date) as current_month_InitDate from mytable
select Dateadd(day, -1,cast('01.'+cast((Month(CURRENT_TIMESTAMP)+1) as nvarchar)+'.'+cast(Year(CURRENT_TIMESTAMP) as nvarchar) as Date)) as current_month_EndDate from mytable

【讨论】:

这根本不适用于 BigQuery,它与 FROM 语句有关,而不是数据库中的字段。 MSsql中不存在这个概念 我写了一个示例如何获取实际月份的第一天和最后一天 DATE_ADD(CURRENT_TIMESTAMP(),-30,'DAY') 在您的示例中将是该月的第一天 -> cast('01.'+cast(Month(CURRENT_TIMESTAMP) as nvarchar)+'.'+cast(Year(CURRENT_TIMESTAMP) as nvarchar) as Date) 所以在这个旧版 SQL 中没有函数可以从timestamp 将它们转换为 varchar 并在前面添加 01 只是为了再次将整个构造转换为 Date ?然后,您可以通过获取下个月的第一天并减去 1 天来获得当前的最后一天

以上是关于在不指定初始和结束日期的情况下编写每月查询的自动方式?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不超过最大文档大小的情况下编写聚合?

在不违反 SRP、OCP、DRY 的情况下编写测试

在不使用 matlab 头文件和库的情况下编写 MAT 文件

是否可以在不使用 main() 函数的情况下编写程序?

我可以在不编写扩展的情况下编写 FlexBuilder 脚本吗?

在不使用标准库的情况下编写 scipy 函数(指数幂)