我一直在运行以下格式的查询
SELECT b.date as Date,COUNT(DISTINCT user_id) AS NewUsers FROM (
SELECT user_id,MIN(date) as min_date
FROM tableA
WHERE date >= '2018-10-10'
AND filter1 = "XYZ"
GROUP BY ) a
CROSS JOIN (
SELECT date FROM tableB
WHERE date >= '2018-10-19' AND date <= CURRENT_DATE()
GROUP BY 1) b
WHERE a.date >= DATE_SUB(b.date, INTERVAL 6 DAY) AND a.date <= b.date
GROUP BY 1
让我们说以上是 result1
SELECT b.date as Date,COUNT(DISTINCT user_id) AS NewUsers FROM (
SELECT user_id,MIN(date) as min_date
FROM tableA
WHERE date >= '2018-07-10'
AND filter1 = "XYZ"
GROUP BY ) a
CROSS JOIN (
SELECT date FROM tableB
WHERE date >= '2018-07-19' AND date <= CURRENT_DATE()
GROUP BY 1) b
WHERE a.date >= DATE_SUB(b.date, INTERVAL 6 DAY) AND a.date <= b.date
GROUP BY 1
以上是结果2
此处 2018-07-19 是发布日期。
由于我拥有直到 2018-10-19 的数据,因此我想从稍后的日期开始运行查询,以优化查询的成本和数据消耗。 ,我得到的数据不正确。
但是,如果我从启动日期开始运行相同的查询,就可以得到正确的结果。
我的意思是相应日期(例如日期> = 2018-10-19)的NewUsers from result1
大于NewUsers from result2
。
不确定,我在哪里缺少什么东西。
任何帮助将不胜感激。
谢谢
答案 0 :(得分:1)
我认为-这是因为使用了'MIN(date)'-您看到日期发生了变化,因为您限制了日期,因此那些最早出现在较早日期的用户-现在将这些相同的“旧”用户计为最近天-因此混乱