我有一个名为“stock”的表,其记录如下所述
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子句中,我在first_table ID上添加“1”(即first_table.id + 1)。 但是,在我得到的结果中,为什么second_table ID会增加?我认为,通过在first_table ID中加1,应该递增的first_table ID而不是第二个表ID。
答案 0 :(得分:2)
在上面的查询中,条款
first_table.id + 1 = second_table.id
是什么意思?
这意味着要加入ID不同1
的表格中的行。
但是,在我得到的结果中,为什么second_table ID会增加?
它没有递增ID,它在一行的ID上加1,并将其与另一行的ID进行比较。当first_table.id = 2
,first_table.id + 1
为3
时,它会与second_table.id = 3
一起加入该行。
添加仅在WHERE
子句中完成,您不会在SELECT
列表中返回结果。因此,它会选择原始first_table.id
,而不是first_table.id + 1
。
如评论中所述,此查询仅在ID全部按1
递增时才能正常工作。如果ID序列中存在任何间隙,您将跳过间隙前的first_table.id
和间隙后的second_table.id
。有关从不依赖于ID的相邻行中减去值的更好方法,请参阅Subtract Quantity From Previous Row MySQL。