我有这个SQL查询:
SELECT COUNT(DISTINCT CustomerName) over(
ORDER BY OrderTimestamp
RANGE BETWEEN INTERVAL 2 hour PRECEDING AND CURRENT ROW
) AS count_per_time
FROM Orders
WHERE CustomerName IS NOT null
AND CustomerName != ''
但它不起作用,因为不允许在OVER子句中使用DISTINCT。有人能帮我解决这个问题吗?非常感谢。
2条答案
按热度按时间rks48beu1#
我不认为这可以用窗口函数来解决。
有一种模拟技术使用
dense_rank
s的减法,但后者不支持窗口框架规范(即:原始代码中的range
/rows
语法)。好吧,准确地说,它实际上允许语法,但默默地忽略它:所以它仍然在整个分区上运行。这在the documentation中有解释:标准SQL指定在整个分区上操作的窗口函数不应该有frame子句。MySQL允许这样的函数使用框架子句,但忽略它。即使指定了一个帧,这些函数也会使用整个分区:
似乎剩下的唯一选项是子查询:
mw3dktmi2#
您可以尝试使用
DENSE_RANK()
,其中PARTITION BY
是分组列,ORDER BY
是ASC
和DESC
要计数的列: