mysql self join子句(递增id)

qni6mghb  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(530)

我有一个名为“stocks”的表,其记录如下所述

ID| Date       | Qty
1 | 2017-01-03 | 10
2 | 2017-02-11 | 15
3 | 2017-03-15 | 16
4 | 2017-04-25 | 30
5 | 2017-06-20 | 40

我想找出每个连续行的“数量”之间的差异。为此,我使用以下查询:

SELECT first_table.id as "First Table ID"
     , first_table.date AS "From"
     , first_table.qty AS "First Table Qty"
     , second_table.id as "Second Table ID"
     , second_table.date AS "To"
     , second_table.qty AS "Second Table Qty"
     , (second_table.qty - first_table.qty) AS Quantity_Difference 
  FROM stocks first_table 
  JOIN stocks second_table 
    ON first_table.id + 1 = second_table.id

下面描述了我从上述查询得到的结果。

我的问题是:
1) 在上面的查询中,子句 first_table.id + 1 = second_table.id 什么意思?
2) 在join子句中,我在第一个表id上添加“1”(即第一个表id+1)。但是,在我得到的结果中,为什么第二个表id会递增?我认为,通过将1添加到第一个表id,第一个表id应该增加,而不是第二个表id。

ghhkc1vu

ghhkc1vu1#

在上面的查询中,子句 first_table.id + 1 = second_table.id 什么意思?
这意味着将表中ID相差 1 .
但是,在我得到的结果中,为什么第二个表id会递增?
它不是递增id,而是将一行的id加1,并将其与另一行的id进行比较。什么时候 first_table.id = 2 , first_table.id + 13 ,因此它将该行与 second_table.id = 3 .
加法只在 WHERE 子句中返回结果 SELECT 列表。所以它选择了原作 first_table.id ,不是 first_table.id + 1 .
正如注解中所提到的,只有当ids都以 1 . 如果id序列中有任何间隙,您将跳过 first_table.id 在缺口和 second_table.id 在差距之后。请参阅subtract quantity from previous row mysql,以获得从相邻行中减去值的更好方法,该方法不依赖于顺序id。

相关问题