调用要在where语句中使用的存储过程

时间:2016-08-22 07:07:10

标签: mysql stored-procedures where

所以我有一个带有以下WHERE语句的查询

WHERE
    (SELECT max(pa.txndate) 
                    FROM player_activity pa 
                    WHERE pa.userID = customer_profile.userID
        ) =  date(CURDATE()) - INTERVAL 7 DAY

我的查询实际上还有其他几个子查询,但我被告知所有子查询都会导致性能下降,因此我需要使用存储过程。

创建以下

CREATE PROCEDURE `getMaxPaDate`()
BEGIN
    SELECT userid, max(txndate) 
    FROM player_activity  
    GROUP by userid;
END

但是,我不知道如何调用存储过程,所以不出所料,以下对我没有用。

WHERE
     call getMaxPaDate() = date(CURDATE()) - INTERVAL 7 DAY

帮助?

1 个答案:

答案 0 :(得分:0)

使其成为存储过程不会提高性能。您需要做的是使用连接。

SELECT cp.*
FROM customer_profile AS cp
JOIN (SELECT userID
      FROM player_activity
      GROUP BY userID
      HAVING MAX(pa.txndate) = TODAY() - INTERVAL 7 DAY) AS pa
ON cp.userID = pa.userID