我有一个名为“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。
1条答案
按热度按时间ghhkc1vu1#
在上面的查询中,子句
first_table.id + 1 = second_table.id
什么意思?这意味着将表中ID相差
1
.但是,在我得到的结果中,为什么第二个表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
.正如注解中所提到的,只有当ids都以
1
. 如果id序列中有任何间隙,您将跳过first_table.id
在缺口和second_table.id
在差距之后。请参阅subtract quantity from previous row mysql,以获得从相邻行中减去值的更好方法,该方法不依赖于顺序id。