Mysql SQL:如何使用变量逐个筛选行?

Mysql SQL:如何使用变量逐个筛选行?,mysql,sql,Mysql,Sql,我觉得一个例子更能说明我的问题 我想做的是从每个客户最近的购买日期起一年后为他们选择每一次购买。因此,如果客户A最近一次购买是2017年1月5日,那么我希望他们从2016年1月5日购买到2017年1月5日。然而,如果有人最近购买的是2017年2月2日,我只想要他们从2016年2月2日到2017年2月2日的购买 我可以手动输入日期,但我不能这样做,因为我想将此数据实现到一个自动化模型中使用子查询连接,该子查询获取每个客户端的最新时间,然后在连接条件中使用它 SELECT p.* FROM purc

我觉得一个例子更能说明我的问题

我想做的是从每个客户最近的购买日期起一年后为他们选择每一次购买。因此,如果客户A最近一次购买是2017年1月5日,那么我希望他们从2016年1月5日购买到2017年1月5日。然而,如果有人最近购买的是2017年2月2日,我只想要他们从2016年2月2日到2017年2月2日的购买


我可以手动输入日期,但我不能这样做,因为我想将此数据实现到一个自动化模型中

使用子查询连接,该子查询获取每个客户端的最新时间,然后在连接条件中使用它

SELECT p.*
FROM purchases AS p
JOIN (SELECT client_id, MAX(purchase_data) AS maxdate
      FROM purchases
      GROUP BY client_id) AS m
ON p.client_id = m.client_id 
    AND p.purchase_date BETWEEN DATE_SUB(m.maxdate, INTERVAL 1 YEAR) AND m.maxdate

使用获取每个客户机最近时间的子查询进行连接,然后在连接条件中使用该子查询

SELECT p.*
FROM purchases AS p
JOIN (SELECT client_id, MAX(purchase_data) AS maxdate
      FROM purchases
      GROUP BY client_id) AS m
ON p.client_id = m.client_id 
    AND p.purchase_date BETWEEN DATE_SUB(m.maxdate, INTERVAL 1 YEAR) AND m.maxdate

我不明白。如果最近一次是1月1日,为什么范围使用1月5日?修正为1月5日,你的感觉是正确的。你的行为没有达到预期。看,我不明白。如果最近一次是1月1日,为什么范围使用1月5日?修正为1月5日,你的感觉是正确的。你的行为没有达到预期。看见