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%H') ) t2 on t2.id = t1.id 转换成elasticsearch怎么写?
时间: 2024-03-05 11:50:09 浏览: 83
在 Elasticsearch 中,可以使用如下的 DSL 查询语句来实现相同的功能:
```
{
"query": {
"bool": {
"must": [
{
"range": {
"createTime": {
"gte": "2023-03-03",
"lte": "2023-06-02 23:59:59"
}
}
},
{
"term": {
"deviceID": {
"value": 27143
}
}
},
{
"term": {
"monKey": {
"value": 107
}
}
}
]
}
},
"aggs": {
"group_by_hour": {
"date_histogram": {
"field": "createTime",
"interval": "hour",
"format": "yyyyMMddHH"
},
"aggs": {
"monValue_sum": {
"sum": {
"field": "monValue"
}
}
}
}
}
}
```
该查询语句使用了 Elasticsearch 的聚合功能来实现按小时统计 monValue 的值,并且使用了过滤器来筛选符合条件的文档。需要注意的是,Elasticsearch 中的时间格式是 ISO8601 格式,因此需要将查询条件中的时间格式进行相应的转换。
阅读全文