private boolean isDateBinFunctionOfTime(
        Expression expression,
        List<FunctionCall> dateBinFunctionsOfTime,
        DeviceTableScanNode tableScanNode) {
      if (expression instanceof FunctionCall) {
        FunctionCall function = (FunctionCall) expression;
        if (TableBuiltinScalarFunction.DATE_BIN
                .getFunctionName()
                .equals(function.getName().toString())
            && function.getArguments().get(2) instanceof SymbolReference
            && tableScanNode.isTimeColumn(Symbol.from(function.getArguments().get(2)))) {
          dateBinFunctionsOfTime.add(function);
          return true;
        }
      }
      return false;
    }
Calculate the level of push-down, and extract the projection of date_bin(time).
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/PushAggregationIntoTableScan.java