| --- |
| { |
| "title": "RUNNING_DIFFERENCE", |
| "language": "en" |
| } |
| --- |
| |
| <!-- |
| Licensed to the Apache Software Foundation (ASF) under one |
| or more contributor license agreements. See the NOTICE file |
| distributed with this work for additional information |
| regarding copyright ownership. The ASF licenses this file |
| to you under the Apache License, Version 2.0 (the |
| "License"); you may not use this file except in compliance |
| with the License. You may obtain a copy of the License at |
| http://www.apache.org/licenses/LICENSE-2.0 |
| Unless required by applicable law or agreed to in writing, |
| software distributed under the License is distributed on an |
| "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| KIND, either express or implied. See the License for the |
| specific language governing permissions and limitations |
| under the License. |
| --> |
| |
| ## running_difference |
| |
| ### description |
| #### Syntax |
| |
| `T running_difference(T x)` |
| |
| Calculates the difference between successive row values in the data block. |
| The result of the function depends on the affected data blocks and the order of data in the block. |
| |
| The rows order used during the calculation of running_difference can differ from the order of rows returned to the user. The function will be deprecated in the future. Please use window function instead, below is the example: |
| ```sql |
| -- running difference(x) |
| SELECT running_difference(x) FROM t ORDER BY k; |
| |
| -- window function |
| SELECT x - lag(x, 1, 0) OVER (ORDER BY k) FROM t; |
| ``` |
| |
| #### Arguments |
| `x` - A list of data.TINYINT,SMALLINT,INT,BIGINT,LARGEINT,FLOAT,DOUBLE,DATE,DATETIME,DECIMAL |
| |
| ##### Returned value |
| Returns 0 for the first row and the difference from the previous row for each subsequent row |
| |
| ### example |
| |
| ```sql |
| DROP TABLE IF EXISTS running_difference_test; |
| |
| CREATE TABLE running_difference_test ( |
| `id` int NOT NULL COMMENT 'id', |
| `day` date COMMENT 'day', |
| `time_val` datetime COMMENT 'time_val', |
| `doublenum` double NULL COMMENT 'doublenum' |
| ) |
| DUPLICATE KEY(id) |
| DISTRIBUTED BY HASH(id) BUCKETS 3 |
| PROPERTIES ( |
| "replication_num" = "1" |
| ); |
| |
| INSERT into running_difference_test (id, day, time_val,doublenum) values ('1', '2022-10-28', '2022-03-12 10:41:00', null), |
| ('2','2022-10-27', '2022-03-12 10:41:02', 2.6), |
| ('3','2022-10-28', '2022-03-12 10:41:03', 2.5), |
| ('4','2022-9-29', '2022-03-12 10:41:03', null), |
| ('5','2022-10-31', '2022-03-12 10:42:01', 3.3), |
| ('6', '2022-11-08', '2022-03-12 11:05:04', 4.7); |
| |
| SELECT * from running_difference_test ORDER BY id ASC; |
| |
| +------+------------+---------------------+-----------+ |
| | id | day | time_val | doublenum | |
| +------+------------+---------------------+-----------+ |
| | 1 | 2022-10-28 | 2022-03-12 10:41:00 | NULL | |
| | 2 | 2022-10-27 | 2022-03-12 10:41:02 | 2.6 | |
| | 3 | 2022-10-28 | 2022-03-12 10:41:03 | 2.5 | |
| | 4 | 2022-09-29 | 2022-03-12 10:41:03 | NULL | |
| | 5 | 2022-10-31 | 2022-03-12 10:42:01 | 3.3 | |
| | 6 | 2022-11-08 | 2022-03-12 11:05:04 | 4.7 | |
| +------+------------+---------------------+-----------+ |
| |
| SELECT |
| id, |
| running_difference(id) AS delta |
| FROM |
| ( |
| SELECT |
| id, |
| day, |
| time_val, |
| doublenum |
| FROM running_difference_test |
| )as runningDifference ORDER BY id ASC; |
| |
| +------+-------+ |
| | id | delta | |
| +------+-------+ |
| | 1 | 0 | |
| | 2 | 1 | |
| | 3 | 1 | |
| | 4 | 1 | |
| | 5 | 1 | |
| | 6 | 1 | |
| +------+-------+ |
| |
| SELECT |
| day, |
| running_difference(day) AS delta |
| FROM |
| ( |
| SELECT |
| id, |
| day, |
| time_val, |
| doublenum |
| FROM running_difference_test |
| )as runningDifference ORDER BY id ASC; |
| |
| +------------+-------+ |
| | day | delta | |
| +------------+-------+ |
| | 2022-10-28 | 0 | |
| | 2022-10-27 | -1 | |
| | 2022-10-28 | 1 | |
| | 2022-09-29 | -29 | |
| | 2022-10-31 | 32 | |
| | 2022-11-08 | 8 | |
| +------------+-------+ |
| |
| SELECT |
| time_val, |
| running_difference(time_val) AS delta |
| FROM |
| ( |
| SELECT |
| id, |
| day, |
| time_val, |
| doublenum |
| FROM running_difference_test |
| )as runningDifference ORDER BY id ASC; |
| |
| +---------------------+-------+ |
| | time_val | delta | |
| +---------------------+-------+ |
| | 2022-03-12 10:41:00 | 0 | |
| | 2022-03-12 10:41:02 | 2 | |
| | 2022-03-12 10:41:03 | 1 | |
| | 2022-03-12 10:41:03 | 0 | |
| | 2022-03-12 10:42:01 | 58 | |
| | 2022-03-12 11:05:04 | 1383 | |
| +---------------------+-------+ |
| |
| SELECT |
| doublenum, |
| running_difference(doublenum) AS delta |
| FROM |
| ( |
| SELECT |
| id, |
| day, |
| time_val, |
| doublenum |
| FROM running_difference_test |
| )as runningDifference ORDER BY id ASC; |
| |
| +-----------+----------------------+ |
| | doublenum | delta | |
| +-----------+----------------------+ |
| | NULL | NULL | |
| | 2.6 | NULL | |
| | 2.5 | -0.10000000000000009 | |
| | NULL | NULL | |
| | 3.3 | NULL | |
| | 4.7 | 1.4000000000000004 | |
| +-----------+----------------------+ |
| |
| ``` |
| |
| ### keywords |
| |
| running_difference |