情况就是这样。我正在尝试使用选择语法来获取前一天的数据(今天我们有 21.10,因此我应该有 20.10 日期查询的数据将成为 Talend 中 ETL 过程的一部分,所以我不能简单地做 where date = '2016-10-20'
) 问题是数据源中的所有列都是 VARCHAR 或 STRING 类型 - 日期也是。来源在 Hive Hadoop 上。
我的代码:
select
cast(to_date(from_unixtime(unix_timestamp(dzien ,'yyyyMMdd'), 'yyyy-MM-dd')) as date),
count(ns_utc) as ILOSC_ODSLON
from portal.portal_data
where
portal_data.opl_ev_ty is null
and portal_data.opl_ev_as is null
and cast(to_date(from_unixtime(unix_timestamp(dzien ,'yyyyMMdd'), 'yyyy-MM-dd')) as date) = CAST(TO_DATE(FROM_UNIXTIME(UNIX_TIMESTAMP()))as date) - interval '1' day
GROUP BY
cast(to_date(from_unixtime(unix_timestamp(dzien ,'yyyyMMdd'), 'yyyy-MM-dd')) as date)
使用该代码查询除了列名之外什么都不返回。问题可能出在这部分 = CAST(TO_DATE(FROM_UNIXTIME(UNIX_TIMESTAMP()))as date) - interval '1' day
上。
我做了一些测试。当我运行这个查询时
select CAST(TO_DATE(FROM_UNIXTIME(UNIX_TIMESTAMP()))as date) - interval '1' day
结果是 2016-10-20 00:00:00.0
部分 00:00:00.0 可能会破坏我的查询,因为在主查询中而不是 = CAST(TO_DATE(FROM_UNIXTIME(UNIX_TIMESTAMP()))as date) - interval '1' day
我将条件 = '2016-10-20'
结果是 asd预期的。
你能指导我如何解决这个问题吗?
我使用的是 SQL Workbench 而不是 Hue
原文由 Voystin 发布,翻译遵循 CC BY-SA 4.0 许可协议
问题是您尝试从日期中减去一天的方式。我建议从 where 子句中的 unix 时间戳中减去一天中的秒数(86400)-