我有一个“交互”表,基本上每次 id 交互时都有一行。所以可以有很多重复的id:
id | 互动日期 |
---|---|
1651 | 2017 年 9 月 15 日下午 3:07 |
1366 | 2017 年 6 月 28 日,晚上 8:32 |
1366 | 2017 年 7 月 3 日下午 6:26 |
1366 | 2017 年 7 月 3 日下午 6:22 |
1212 | 2017 年 8 月 24 日下午 1:05 |
1366 | 2017 年 9 月 18 日上午 9:15 |
我需要滚动 90 天不同的 ID,但只计算在那 90 天内出现 3 次或更多次的 ID(高参与度)。我在将 1 天的 90 天回顾查询转换为滚动查询时遇到了麻烦,该查询针对一年中的每一天进行提取。
(顺便说一下,我从 Redshift 中提取数据)首先,我编写了一个 sql 查询,以获取过去 90 天内 ID 的不同计数,其中 ID 交互至少 3 次以进行计数:
WITH cte AS
(
SELECT
id
,COUNT(id) "Count"
FROM interactions
WHERE 1=1
AND dateinteracted >= (current_date - 90)
AND dateinteracted < current_date
GROUP BY id
HAVING COUNT(id) >= 3
)
SELECT
COUNT(DISTINCT(id)) "DistinctCount"
FROM cte
然后我尝试将其转换为滚动拉动。即,对于每一天,我都希望从前 90 天的参与度 >=3 中得到不同的计数。 (由于从不支持的 Amazon Redshift 中提取此数据,因此我无法使用带有 RANGE 的窗口函数):
WITH cte AS (
SELECT
A.dateinteracted,
A.id,
(SELECT
COUNT(B.id)
FROM interactions AS B
WHERE 1=1
AND B.id = A.id
AND B.dateinteracted >= (A.dateinteracted - 90)
AND B.dateinteracted < A.dateinteracted
) AS RollingCount
FROM interactions AS A
)
SELECT
CAST(dateinteracted as Date) "Date",
COUNT( DISTINCT(id)) "DistinctCount"
FROM cte
WHERE 1=1
AND RollingCount >= 3
GROUP BY
CAST(dateinteracted as Date)
ORDER BY 1 DESC
这段代码看起来很接近,但看起来少算了。我不是很肯定,但我认为问题在于,对于每一天,它只会回顾 90 天后恰好在那天出现的 ID,而不是从该日期开始的前 90 天的所有 ID。任何帮助都会非常感谢!