我有以下查询:
select cast(ov.ingestion_timestamp as date), date(ov.date_id), cast(ov.main_category as varchar),
sum(cast(ov.order_target as int)),
sum(cast(ov.gmv_target as int))
from tableA ov
inner join tableB cb
on date(ov.date_id) = date(cb.ingestion_timestamp)
inner join tableC loc
on date(ov.date_id) = date(loc.ingestion_timestamp)
where MONTH(date(ov.ingestion_timestamp)) = month(current_date)
group by 1,2,3
我想获取ingestion_timestamp列的月份等于当前月份的记录。所有列值都存储为对象,因此我需要转换为它们各自的数据类型。我可以知道如何获取ingestion_timestamp列的月份吗?
谢谢。
我建议不要cast
在该where
子句中使用:这效率低下,因为该函数需要在过滤之前应用于每行。
相反,您可以计算与该月初相对应的时间戳,并将其用于直接过滤:
where ingestion_timestamp >= to_unixtime(date_trunc(month, current_date))
如果您有将来的日期,则可以添加上限
where
ingestion_timestamp >= to_unixtime(date_trunc(month, current_date))
and ingestion_timestam < to_unixtime(date_trunc(month, current_date) + interval '1' month)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句