我有以下查询工作正常。
但是我现在需要在其中添加一个WHERE子句,但是我无法弄清楚应该在哪里放置WHERE子句。
SELECT COUNT(*) max_streak
FROM
( SELECT x.*
, CASE WHEN @prev = ms_date - INTERVAL 1 DAY THEN @i:=@i ELSE @i:=@i+1 END i
, @prev:=ms_date
FROM
( SELECT DISTINCT ms_date FROM TABLE_NAME ORDER BY ms_date) x
JOIN
( SELECT @prev:=null,@i:=0) vars
) a
GROUP
BY i
ORDER
BY max_streak DESC
有人可以对此提出建议吗?
编辑:
在TABLE_NAME
中有一个userEmail
列。
我需要在WHERE userEmail='some-email@email.com'
上方运行整个查询
我希望现在变得更好。
答案 0 :(得分:1)
只需像通常在FROM定义之后添加您的WHERE:
SELECT COUNT(*) max_streak FROM ( SELECT x.* , CASE WHEN @prev = ms_date - INTERVAL 1 DAY THEN @i:=@i ELSE @i:=@i+1 END i , @prev:=ms_date FROM ( SELECT DISTINCT ms_date FROM TABLE_NAME WHERE TABLE_NAME.userEmail='some-email@email.com' ORDER BY ms_date) x JOIN ( SELECT @prev:=null,@i:=0) vars ) a GROUP BY i ORDER BY max_streak DESC
但是有时最好从内部子选择中选择文件以在整个最终查询结果之外使用WHERE进行过滤。