RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1025007
Accepted
Dmitriy Lavrov
Dmitriy Lavrov
Asked:2020-09-16 22:35:55 +0000 UTC2020-09-16 22:35:55 +0000 UTC 2020-09-16 22:35:55 +0000 UTC

如何按日期在 AlaSql 中进行查询?

  • 772

我正在写一个谷歌脚本。我需要对表格行进行排序并编写已排序的行。为了实现我使用AlaSql库的目标。我正在尝试按日期排序。我已经一个星期没有找到解决方案了。这是请求代码:

var sql = "select Col1, Col2, Col4, Col8, CAST(Col15 AS date) from ? WHERE Col15 > '2019-01-01' ";

这不起作用。这是整个代码

  var file = SpreadsheetApp.openById("id_spreadsheet"); // получаем таблицу по ее id
  var sheet = file.getSheetByName('РЕЕСТР2'); //  - имя листа в реестре
  var range = sheet.getDataRange();
  var data_sheet = range.getValues();
  var sheet_2 =  SpreadsheetApp.getActive().getSheetByName("AlaSql");
  var sql = "select Col1, Col2, Col4, Col8, CAST(Col15 AS date) from ? WHERE Col15 > '2019-01-01' "; // строка запроса
  var data = getAlaSql(sql, data_sheet); // вызов функции AlaSql
try 
  {
    Logger.log("data.length = " + data.length);
    Logger.log("data[0].length = " + data[0].length);
  }
  catch (e)
  {
    Browser.msgBox("Не найдено ни одной строки");
  }

  sheet_2.clearContents(); // очистка данных
  removeEmptyRows(sheet_2); // Вызов функции удаления строк лишних

  sheet_2.getRange(1, 1,data.length,data[0].length).setValues(data); // запись результата на лист. data.length - длинна строк,data[0].length - длинна столбцов

我已经阅读了很多资料。尝试了以下替代方案

  1. 项目清单

    选项1

  2. 项目清单

    方法4

  3. 项目清单

    查询语言参考(0.7 版)

结果与 AlaSql 中的结果相同。整个问题在于按日期过滤。

最初,工作逻辑基于QUERY公式

= query( main_data_sheet ;"select B, D, H, count(I) where  (O is not null and O > date 
'"&TEXT($B$5;"yyyy-mm-dd") &"' and O < date '"&TEXT($B$6;"yyyy-mm-dd") &"') and 
(U = '"&$A$3&"') and (R = '"&$B$8&"' or R = '"&$B$9&"' or
 R = '"&$B$10&"' or R = '"&$B$11&"' or R = '"&$B$12&"') 
group by B,D,H  label B '', D '', H '', count(I) ''  ";0) 

其中单元格 B8 = 格式为 01/01/2019 的日期。它有效。

我尝试了各种在脚本中编写请求的选项。什么都不适合。截图如下。 各种请求选项

问题解决了。非常感谢@contributorpw。可以通过单击链接打开带有脚本的 Google 电子表格 通过单击文件将其复制给自己- 创建副本

google-apps-script
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    contributorpw
    2020-09-17T00:41:50Z2020-09-17T00:41:50Z

    我用丁字裤或数字标出日期。

    在下面的示例中,第一列是日期列。

    function slicer(range) {
      var data = range;
      data.forEach(mapDtoN_);
      var query = 'SELECT MATRIX [0], [1], [2] FROM ? ';
      query += 'WHERE [0] + [1] IN (SELECT MAX([0]) + [1] FROM ? GROUP BY [1])';
      var res = alasql(query, [data, data], function(d){
        return d.forEach(mapNtoD_);
      });
      return res;
    }
    
    function mapDtoN_(row){
      row[0] = row[0].getTime ? row[0].getTime() : 0;
    }
    
    function mapNtoD_(row){
      row[0] = new Date(row[0]);
    }
    

    例如,选择所有小于给定日期的

      var data = range;
      var date = new Date().getTime();
      data.forEach(mapDtoN_);
      var query = 'SELECT MATRIX [0], [1], [2] FROM ? WHERE [0] < ?';
      var res = alasql(query, [data, date], function(d){
        return d.forEach(mapNtoD_);
      });
      return res;
    

    对于您的示例,一切都变得更加简单。这是工作程序的完整列表

    /* global AlaSQLGS */
    /* exported myFunction2 */
    function myFunction2() {
      var query =
        "select MATRIX Col1,Col2,Col4,Col8,Col15 from ? where Col15>=DATE('20190525')";
      query = AlaSQLGS.fromColNota(query);
    
      var data = SpreadsheetApp.getActive()
        .getSheetByName('SOURCE_FOR_AlaSql')
        .getDataRange()
        .getValues();
      var header = data.splice(0, 2).map(function(row) {
        return [1, 2, 4, 8, 15].map(function(i) {
          return row[i];
        });
      });
    
      var alasql = AlaSQLGS.load();
    
      var res = alasql(query, [data]);
    
      var values = header.concat(res);
    
      SpreadsheetApp.getActive()
        .getSheetByName('Лист3')
        .clearContents()
        .getRange(1, 1, values.length, values[0].length)
        .setValues(values);
    }
    

    尝试使用您的 AlaSQL 版本,但结果不是很好,可能是非常旧的代码

    function myFunction3() {
      var query =
        "select MATRIX Col1,Col2,Col4,Col8,Col15 from ? where Col15>=DATE('20190525')";
      query = AlaSQLGS.fromColNota(query);
    
      var data = SpreadsheetApp.getActive()
        .getSheetByName('SOURCE_FOR_AlaSql')
        .getDataRange()
        .getValues();
      var header = data.splice(0, 2).map(function(row) {
        return [1, 2, 4, 8, 15].map(function(i) {
          return row[i];
        });
      });
    
      var res = getAlaSql(query, data);
    
      var values = header.concat(res);
    
      SpreadsheetApp.getActive()
        .getSheetByName('Лист3')
        .clearContents()
        .getRange(1, 1, values.length, values[0].length)
        .setValues(values);
    }
    

    您也可以将自己的函数连接到 AlaSQL,但不知何故,它对我来说不适用于日期。

    • 0

相关问题

  • 复制带有偏移量的公式

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    根据浏览器窗口的大小调整背景图案的大小

    • 2 个回答
  • Marko Smith

    理解for循环的执行逻辑

    • 1 个回答
  • Marko Smith

    复制动态数组时出错(C++)

    • 1 个回答
  • Marko Smith

    Or and If,elif,else 构造[重复]

    • 1 个回答
  • Marko Smith

    如何构建支持 x64 的 APK

    • 1 个回答
  • Marko Smith

    如何使按钮的输入宽度?

    • 2 个回答
  • Marko Smith

    如何显示对象变量的名称?

    • 3 个回答
  • Marko Smith

    如何循环一个函数?

    • 1 个回答
  • Marko Smith

    LOWORD 宏有什么作用?

    • 2 个回答
  • Marko Smith

    从字符串的开头删除直到并包括一个字符

    • 2 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5