在MySQL查询左联接中减去2行

在MySQL查询左联接中减去2行,mysql,database,Mysql,Database,问题是我想让ClientsStat中的一些字段的值,其中date=“DATE1”减去相同的字段,但带有日期#2,但我不确定在左联接中如何才能做到这一点。我尝试对同一个表进行另一个左连接,并重命名它和进行减法运算,但执行时间非常长,所以我猜我的方法不好 编辑: 我的结果是: SELECT * From `users` AS `User` LEFT JOIN `selections` AS `Selections` ON (`Selections`.`user_id` = `User`.`id`)

问题是我想让ClientsStat中的一些字段的值,其中date=“DATE1”减去相同的字段,但带有日期#2,但我不确定在左联接中如何才能做到这一点。我尝试对同一个表进行另一个左连接,并重命名它和进行减法运算,但执行时间非常长,所以我猜我的方法不好

编辑:

我的结果是:

SELECT * From `users` AS `User`
LEFT JOIN `selections` AS `Selections` ON (`Selections`.`user_id` = `User`.`id`)
LEFT JOIN  `clients` AS `Client` ON (`Client`.`id` = `Selections`.`client_id`)
LEFT JOIN  `client_stats` AS `ClientsStat` ON (`ClientsStat`.`date` = """DATE1""")
等等

我想这样:

USER => fields...
SELECTIONS => fields...
CLIENTS => fields..
CLIENT_STATS => field x,y,z on date = date 1
等等。

首先: 您必须使用另一个表中的字段左键连接到client_stats。因此,首先让连接正常工作。现在的情况是,该查询是否运行? 第二: 然后,可以使用日期上的WHERE子句限制ClientsStat.date上的日期范围:


其中ClientsStat.date>='date1'和ClientsStat.date您应该能够在统计数据上进行双连接。我猜性能是基于索引的。但是,您确定是指左联接(无论第二个表是否匹配,第一个表都需要左联接)。或您是指内部联接吗?您希望联接的两侧都有记录。如果您试图从一个记录日期减去另一个记录日期的值,我希望两个条目都能找到。我写的是“连接”(双方必须存在)而不是“左连接”的基础


不完全确定这是否是您正在寻找的,但我认为您错过的一个元素是在某个日期加入客户端统计表。。。您没有关于哪个客户端ID的限定符,因此可能是您的性能失败的原因。确保client_Stats在(client_id,date)上有一个索引,前提是client_id丢失并且是client_Stats表的一部分。

我完全不知道您在问什么。:-)您能否编辑您的问题以提供一些示例数据,并显示您试图从这些数据中获得的输出?谢谢。:-)等待我可能有。您正在查找
客户端stat.Date
等于
日期1
日期2
的行吗?否。日期=日期1时有信息,日期=日期2时有其他信息。我想把它们减到一起!client_id没有丢失,我只是将其从查询中删除以简化它。事实上,我有一个唯一的“id”,它是由日期和id混合创建的,所以这个索引可以非常快速地找到具有精确用户id和id的行date@Jean-尼古拉斯,好吧,但我的格式是否有助于你了解可能遗漏的内容?您是否通过提及用户ID和具体活动日期来尝试特定的单个用户/客户?我可能倾向于轻微的重组,但到目前为止还没有足够的信息。你说得对,现在的表现还不错。谢谢!
USER => fields
USERSELECTIONS => fields...
CLIENTS => fields..
CLIENT_STATS => field x,y,z when client_stats.date = date1 MINUS field x,y,z when client_stats.date = date2
SELECT 
      U.* 
      CS1.x - CS2.x as XDiff,
      CS1.y - CS2.y as YDiff,
      CS1.z - CS2.z as ZDiff
   From 
      users U
         JOIN selections S
            ON U.ID = S.User_ID
            JOIN clients C
               ON S.Client_ID = C.ID
               JOIN  client_stats CS1
                  ON ( C.ID = CS1.Client_ID AND CS1.`date` = YourFirstDateVariable )
               JOIN  client_stats CS2
                  ON ( C.ID = CS2.Client_ID AND CS2.`date` = YourSecondDateVariable )