sql - 将 sql 转换为 dsl elasticsearch 查询

标签 sql elasticsearch aggregation elasticsearch-dsl

我想将此 sql 查询转换为弹性 DSL 查询语言

SELECT t.pk_c_c_s,
       t.fk_c_c_id,
       t.s_b_a,
       t.datetime,
       SUBSTR(t.datetime, 0, 7) m,
       (
         SELECT SUM(i.s_b_a) sarpu
         FROM TBL_C_C_S i
         WHERE substr(i.datetime, 0, 7) = substr(t.datetime, 0, 7)
           AND i.datetime <= t.datetime
           AND i.fk_c_c_id = t.fk_c_c_id
         GROUP BY SUBSTR(i.datetime, 0, 7)
        ) s
FROM TBL_C_C_S t

我如何将此 sql 查询转换为 elasticsearch

这是我在 elasticsearch 中的方式

POST /c_c_s_index_test/_search
{ "size":0,
  "aggs": {
    "customer": {
      "terms": {
        "field": "fk_c_c_id",
        "size": 5
      },
      "aggs": {
        "sumscore": {
          "sum": {
            "field": "s_b_a"
          }
        },
        "month": {
          "date_histogram": {
            "field": "datetime",
            "interval": "1M",
            "min_doc_count": 1
          },
          "aggs": {
            "customer": {
              "sum": {
                "field": "s_b_a"
              }
            }
          }
        }
      }
    }    ,
        "stats_monthly_sales": {
            "extended_stats_bucket": {
                "buckets_path": "customer>sumscore" 
            }
        }
  }

但这只是返回月份的总和 i.datetime<=t.datetime 不存在于此

最佳答案

您可能需要的是累计和聚合:https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-pipeline-cumulative-sum-aggregation.html

因此您的查询应如下所示:

{
  "size": 0,
  "aggs": {
    "customer": {
      "terms": {
        "field": "fk_c_c_id",
        "size": 5
      },
      "aggs": {
        "sales_per_month": {
          "date_histogram": {
            "field": "datetime",
            "interval": "month"
          },
          "aggs": {
            "sales": {
              "sum": {
                "field": "s_b_a"
              }
            },
            "cumulative_sales": {
              "cumulative_sum": {
                "buckets_path": "sales"
              }
            }
          }
        }
      }
    }
  }
}

关于sql - 将 sql 转换为 dsl elasticsearch 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50324759/

相关文章:

mysql - 在两个不同的列中搜索相同的数据

elasticsearch - Laravel宅基地连接到本地 Elasticsearch

elasticsearch - Elasticsearch查询聚合

mongodb - 合并 MongoDB 中同一集合中的两个文档

sql - 获取 2 个日期之间每月的准确日期值

sql - 在 Oracle Sql 查询中获取格式化字符串

php - 选择插入的最后 7 条记录的 MAX 和 MIN 值

java - 如何禁用一个索引的节点之间的分片重定位?

python - Django 条件聚合

elasticsearch - Elasticsearch订单查询未正确订购