Skip to content

Commit

Permalink
[BUG][Function] fix last_value get wrong result when have order by cl…
Browse files Browse the repository at this point in the history
…ause
  • Loading branch information
zhangstar333 committed Apr 27, 2022
1 parent c1ae1a0 commit baac5f1
Show file tree
Hide file tree
Showing 4 changed files with 61 additions and 3 deletions.
2 changes: 1 addition & 1 deletion be/src/vec/aggregate_functions/aggregate_function_window.h
Original file line number Diff line number Diff line change
Expand Up @@ -220,7 +220,7 @@ struct LeadAndLagData {
}

void set_value(const IColumn** columns, int64_t pos) {
if constexpr (is_nullable) {
if (is_column_nullable(*columns[0])) {
const auto* nullable_column = check_and_get_column<ColumnNullable>(columns[0]);
if (nullable_column && nullable_column->is_null_at(pos)) {
_data_value.set_null(true);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -711,8 +711,7 @@ private void standardize(Analyzer analyzer) throws AnalysisException {
}

// Change first_value/last_value RANGE windows to ROWS
if ((analyticFnName.getFunction().equalsIgnoreCase(FIRSTVALUE)
|| analyticFnName.getFunction().equalsIgnoreCase(LASTVALUE))
if ((analyticFnName.getFunction().equalsIgnoreCase(FIRSTVALUE))
&& window != null
&& window.getType() == AnalyticWindow.Type.RANGE) {
window = new AnalyticWindow(AnalyticWindow.Type.ROWS, window.getLeftBoundary(),
Expand Down
8 changes: 8 additions & 0 deletions regression-test/data/correctness/test_last_value_window.out
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
-- This file is automatically generated. You should know what you did if you want to edit this
-- !select_default --
21 04-21-11 1 1
22 04-22-10-21 0 1
22 04-22-10-21 1 1
23 04-23-10 1 1
24 02-24-10-21 1 1

51 changes: 51 additions & 0 deletions regression-test/suites/correctness/test_last_value_window.groovy
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
// 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.

suite("test_last_value_window") {
def tableName = "state"


sql """ DROP TABLE IF EXISTS ${tableName} """
sql """
CREATE TABLE ${tableName} (
`myday` INT,
`time` VARCHAR(40) NOT NULL,
`state` INT
) ENGINE=OLAP
DUPLICATE KEY(`myday`,time,state)
COMMENT "OLAP"
DISTRIBUTED BY HASH(`myday`) BUCKETS 2
PROPERTIES (
"replication_num" = "1",
"in_memory" = "false",
"storage_format" = "V2"
);
"""

sql """ INSERT INTO ${tableName} VALUES
(21,"04-21-11",1),
(22,"04-22-10-21",0),
(22,"04-22-10-21",1),
(23,"04-23-10",1),
(24,"02-24-10-21",1); """

// not_vectorized
sql """ set enable_vectorized_engine = false; """

qt_select_default """ select *,last_value(state) over(partition by myday order by time) from ${tableName}; """

}

0 comments on commit baac5f1

Please sign in to comment.