SELECT DATE_FORMAT(t1.createTime, '%Y%m%d%H') AS monTime, IFNULL(t1.monValue,0) AS monValue FROM device_monitor_attr_his t1 INNER JOIN (SELECT MAX(id) id FROM device_monitor_attr_his t where deviceID=27143 AND monKey=107 AND createTime > '2023-03-03' AND createTime < '2023-06-02 23:59:59' GROUP BY DATE_FORMAT(createTime,'%Y%m%d') ) t2 on t2.id = t1.id 转换成elasticsearch怎么写?
时间: 2024-03-05 18:48:23 浏览: 59
MySQL IF、 Bewteen、 AS、 Date_Format、Left join on等关键字实例
这个 SQL 查询可以转换成 Elasticsearch 的聚合查询,具体的查询语句如下:
```
GET /_search
{
"query": {
"bool": {
"must": [
{
"match": {
"deviceID": 27143
}
},
{
"match": {
"monKey": 107
}
},
{
"range": {
"createTime": {
"gte": "2023-03-03",
"lt": "2023-06-02T23:59:59"
}
}
}
]
}
},
"aggs": {
"group_by_date": {
"date_histogram": {
"field": "createTime",
"interval": "day",
"format": "yyyy-MM-dd"
},
"aggs": {
"max_id": {
"max": {
"field": "id"
}
},
"mon_value": {
"terms": {
"script": {
"source": "doc['monValue'].value ?: 0"
}
}
}
}
}
}
}
```
这个查询使用了 Elasticsearch 的聚合查询,首先根据设备 ID、监控指标和时间范围来过滤数据,然后再按照每天的日期进行分组,并且对每个分组内的数据进行聚合计算,其中包括求出每个分组内的最大 ID 值和计算 monValue 的和。注意,这里使用了 Elasticsearch 的脚本语言来处理 monValue 的空值,如果 monValue 为空,则将其值设置为 0。
阅读全文