复杂的MYSQL查询中的WHERE子句?

时间:2018-11-18 20:50:45

标签: mysql

我有以下查询工作正常。

但是我现在需要在其中添加一个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'上方运行整个查询

我希望现在变得更好。

1 个答案:

答案 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进行过滤。