SQL 之间的 和 日期操作不起作用



这是我尝试执行的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),以便我们将获得所有值,包括与最后一个日期对应的值。

相关内容

  • 没有找到相关文章

最新更新