这是我尝试执行的SQL查询:
select *,count(dummy) over(partition by dummy) as total_count
from aaca711a5e78441cdbf062f1d630ee261
WHERE (max_timestamp BETWEEN '2017-01-01' AND '2018-01-01')
ORDER BY max_timestamp DESC
据我所知,在 BETWEEN AND 操作中,这两个值都是包含的。在这里,此查询无法获取与 2018-01-01 对应的记录。
我将查询更改为:
select *,count(dummy) over(partition by dummy) as total_count
from aaca711a5e78441cdbf062f1d630ee261
WHERE (max_timestamp >= '2017-01-01' AND max_timestamp <= '2018-01-01')
ORDER BY max_timestamp DESC
不过,它不起作用。 然后我试了这个:
select *,count(dummy) over(partition by dummy) as total_count
from aaca711a5e78441cdbf062f1d630ee261
WHERE (max_timestamp >= '2017-01-01' AND max_timestamp <= '2018-01-02')
ORDER BY max_timestamp DESC
它能够获取与 2018-01-01 相关的记录。
这可能是什么原因?我该如何解决这个问题? 提前谢谢。
这是您的查询:
select *, count(dummy) over (partition by dummy) as total_count
from aaca711a5e78441cdbf062f1d630ee261
where max_timestamp BETWEEN '2017-01-01' AND '2018-01-01'
order by max_timestamp DESC;
只是不要将between
与日期时间一起使用。 使用显式逻辑:
select *, count(dummy) over (partition by dummy) as total_count
from aaca711a5e78441cdbf062f1d630ee261
where max_timestamp >= '2017-01-01' and
max_timestamp < '2018-01-02' --> notice this is one day later
order by max_timestamp DESC;
问题是日期上有一个时间部分。
亚伦·伯特兰(Aaron Bertrand)在他的博客中很好地解释了这一点BETWEEN
和魔鬼有什么共同点?(我被这个标题逗乐了,因为BETWEEN
确实存在,但关于魔鬼的存在有更多的争议。
这是Spark的已知问题。
请参阅此链接以获取更多信息:https://issues.apache.org/jira/browse/SPARK-10837
我已经通过使用 Spark 提供的date_add功能解决了这个问题。 因此,最后一个日期更改为date_add(endDate, 1),以便我们将获得所有值,包括与最后一个日期对应的值。