# Kibana essql query date diff

**URL:** https://discuss.elastic.co/t/kibana-essql-query-date-diff/271483
**Category:** Kibana
**Tags:** canvas
**Created:** [April 28, 2021, 8:28am UTC](https://discuss.elastic.co/t/kibana-essql-query-date-diff/271483 "2021-04-28T08:28:53Z")
**Posts on this page:** 20
**Page:** 1

<div class="post-metadata">

### Author: ![accateo](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/accateo/32/85332_2.png) [@accateo](https://discuss.elastic.co/u/accateo)
#### Post date: [April 28, 2021, 8:28am UTC](https://discuss.elastic.co/t/kibana-essql-query-date-diff/271483/1 "2021-04-28T08:28:53Z")

</div>

Hi,  
I have a series of such data in Kibana:

"deviceID" "date"  
35001 27-04-21 13:20:00  
35002 27-04-21 15:21:00  
35001 27-04-21 18:22:00  
35002 27-04-21 19:30:00

I would like to obtain as a result a bar graph in Canavas which, divided by days and deviceId,  
show the difference between the various times.  
Then:  
35001 27-04-21 5 hours  
35002 27-04-21 4 hours

It's possible with Kibana and ESSQL?  
Thanks

---

<div class="post-metadata">

### Author: ![accateo](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/accateo/32/85332_2.png) [@accateo](https://discuss.elastic.co/u/accateo)
#### Post date: [May 4, 2021, 8:46am UTC](https://discuss.elastic.co/t/kibana-essql-query-date-diff/271483/2 "2021-05-04T08:46:12Z")

</div>

Any hints?

---

<div class="post-metadata">

### Author: ![lukas](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/lukas/32/6812_2.png) [@lukas](https://discuss.elastic.co/u/lukas)
#### Post date: [May 4, 2021, 6:31pm UTC](https://discuss.elastic.co/t/kibana-essql-query-date-diff/271483/3 "2021-05-04T18:31:27Z")

</div>

I think so, could you try something like this:

```sql
SELECT deviceID, DATE_TRUNC('day', date) AS day, DATEDIFF('hours', MIN(date), MAX(date)) AS duration
FROM "devices"
GROUP BY deviceID, day

```

---

<div class="post-metadata">

### Author: ![accateo](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/accateo/32/85332_2.png) [@accateo](https://discuss.elastic.co/u/accateo)
#### Post date: [May 5, 2021, 8:13am UTC](https://discuss.elastic.co/t/kibana-essql-query-date-diff/271483/4 "2021-05-05T08:13:47Z")

</div>

I found the query:

```auto
SELECT DAY(date) as dd, DATE_DIFF('hours',MIN(date),MAX(date)) as diff FROM "application_data_bridgenuzoo" WHERE tagId=XXXX GROUP BY DAY(date)

```

but the graph component doesn't show the day in the X axes. Why?

---

<div class="post-metadata">

### Author: ![Felix\_Roessel](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/felix_roessel/32/41623_2.png) [@Felix\_Roessel](https://discuss.elastic.co/u/Felix_Roessel)
#### Post date: [May 5, 2021, 2:23pm UTC](https://discuss.elastic.co/t/kibana-essql-query-date-diff/271483/5 "2021-05-05T14:23:56Z")

</div>

You need to post the full Expression to Tell you that

---

<div class="post-metadata">

### Author: ![accateo](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/accateo/32/85332_2.png) [@accateo](https://discuss.elastic.co/u/accateo)
#### Post date: [May 5, 2021, 2:40pm UTC](https://discuss.elastic.co/t/kibana-essql-query-date-diff/271483/6 "2021-05-05T14:40:14Z")

</div>

```auto
filters
| essql 
  query="SELECT DAY(date) as dd, DATE_DIFF('hours',MIN(date),MAX(date)) as diff FROM \"application_data_bridgenuzoo\" WHERE tagId=35101 GROUP BY DAY(date)"
| mapColumn "dd" fn={date | formatdate "DD/MM"}
| pointseries x="date" y="diff"
| plot defaultStyle={seriesStyle bars=0.75 lines="1"} legend=false
| render

```

---

<div class="post-metadata">

### Author: ![Felix\_Roessel](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/felix_roessel/32/41623_2.png) [@Felix\_Roessel](https://discuss.elastic.co/u/Felix_Roessel)
#### Post date: [May 5, 2021, 3:50pm UTC](https://discuss.elastic.co/t/kibana-essql-query-date-diff/271483/7 "2021-05-05T15:50:36Z")

</div>

x needs to be dd then and not date or am I wrong?

---

<div class="post-metadata">

### Author: ![accateo](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/accateo/32/85332_2.png) [@accateo](https://discuss.elastic.co/u/accateo)
#### Post date: [May 5, 2021, 4:53pm UTC](https://discuss.elastic.co/t/kibana-essql-query-date-diff/271483/8 "2021-05-05T16:53:26Z")

</div>

yes, dd needs to be on x axes

---

<div class="post-metadata">

### Author: ![accateo](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/accateo/32/85332_2.png) [@accateo](https://discuss.elastic.co/u/accateo)
#### Post date: [May 6, 2021, 10:47am UTC](https://discuss.elastic.co/t/kibana-essql-query-date-diff/271483/9 "2021-05-06T10:47:05Z")

</div>

I've written this:

```auto
filters
| essql 
  query="SELECT DAY(date) as dd, DATE_DIFF('hours',MIN(date),MAX(date)) as diff FROM \"application_data_bridgenuzoo\" WHERE tagId=35101 GROUP BY DAY(date)"
| mapColumn "dd" fn={date | formatdate "DD/MM"}
| pointseries x="dd" y="diff"
| plot defaultStyle={seriesStyle bars=0.75 lines="1"} legend=false
| render

```

same result...

---

<div class="post-metadata">

### Author: ![Felix\_Roessel](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/felix_roessel/32/41623_2.png) [@Felix\_Roessel](https://discuss.elastic.co/u/Felix_Roessel)
#### Post date: [May 6, 2021, 11:16am UTC](https://discuss.elastic.co/t/kibana-essql-query-date-diff/271483/10 "2021-05-06T11:16:22Z")

</div>

I think you need to do getCell in the function of mapColumn. Otherwise mapcolumn does not know which information it should parse as date...

```
 filters
    | essql 
      query="SELECT DAY(date) as dd, DATE_DIFF('hours',MIN(date),MAX(date)) as diff FROM \"application_data_bridgenuzoo\" WHERE tagId=35101 GROUP BY DAY(date)"
    | mapColumn "dd" fn={getcell "dd" | date | formatdate "DD/MM"}
    | pointseries x="dd" y="diff"
    | plot defaultStyle={seriesStyle bars=0.75 lines="1"} legend=false
    | render
```

---

<div class="post-metadata">

### Author: ![accateo](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/accateo/32/85332_2.png) [@accateo](https://discuss.elastic.co/u/accateo)
#### Post date: [May 6, 2021, 12:47pm UTC](https://discuss.elastic.co/t/kibana-essql-query-date-diff/271483/12 "2021-05-06T12:47:00Z")

</div>

I'm almost there...

```auto
filters group="group3" ungrouped=true
| essql 
  query="SELECT DAY(date) as dd, MIN(date) as realDate, DATE_DIFF('hours',MIN(date),MAX(date)) as diff FROM \"application_data_bridgenuzoo\" GROUP BY DAY(date)"
| mapColumn name="formatted_date" expression={getCell "realDate" | formatdate format="DD/MM/YY"}
| pointseries x="formatted_date" y="diff"
| plot defaultStyle={seriesStyle bars=0.75 lines="1"}
| render

```

This is the result:

 ![Cattura](https://us1.discourse-cdn.com/elastic/original/3X/b/6/b67a4a384aa7961cc47b9aae5b11b716910f3bab.png)

Three questions:

- how can I reverse the order on X axes?
- now I'm using GROUP BY DAY(date). If I would to group by day / month? How can I do?
- how can I show more than 5 days?

Thanks

---

<div class="post-metadata">

### Author: ![accateo](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/accateo/32/85332_2.png) [@accateo](https://discuss.elastic.co/u/accateo)
#### Post date: [May 7, 2021, 3:14pm UTC](https://discuss.elastic.co/t/kibana-essql-query-date-diff/271483/13 "2021-05-07T15:14:18Z")

</div>

Any hint??

---

<div class="post-metadata">

### Author: ![Felix\_Roessel](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/felix_roessel/32/41623_2.png) [@Felix\_Roessel](https://discuss.elastic.co/u/Felix_Roessel)
#### Post date: [May 15, 2021, 4:38am UTC](https://discuss.elastic.co/t/kibana-essql-query-date-diff/271483/14 "2021-05-15T04:38:46Z")

</div>

There is a sort function available: [Canvas function reference | Kibana Guide [7.12] | Elastic](https://www.elastic.co/guide/en/kibana/current/canvas-function-reference.html#sort_fn)

To add group by month use group by month instead of day

The graph will visualize all available data. So if there are only 5 and you like more:  
Check your filters  
Check your query ( SQL limits the max results if you not override)  
Check your data (more than 5 days available?)

---

<div class="post-metadata">

### Author: ![accateo](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/accateo/32/85332_2.png) [@accateo](https://discuss.elastic.co/u/accateo)
#### Post date: [May 15, 2021, 9:37am UTC](https://discuss.elastic.co/t/kibana-essql-query-date-diff/271483/15 "2021-05-15T09:37:52Z")

</div>

Hi Felix,  
I already tried the sort function....nothing change.

Current situation:

 ![Cattura1](https://us1.discourse-cdn.com/elastic/original/3X/5/c/5cd88b2652f0d4ee12e5f98f7005f725d73d9598.png)  
 ![Cattura2](https://us1.discourse-cdn.com/elastic/original/3X/9/a/9a757e48a3f5b54c24c72995586e2966ec830be9.png)

with expression:

```auto
filters group="group3" ungrouped=true
| essql 
  query="SELECT DAY(date) as dd, MIN(date) as realDate, DATE_DIFF('hours',MIN(date),MAX(date)) as diff FROM \"application_data_bridgenuzoo\" GROUP BY DAY(date)"
| mapColumn name="formatted_date" expression={getCell "realDate" | formatdate format="DD/MM/YY"}
| pointseries x="formatted_date" y="diff"
| plot defaultStyle={seriesStyle bars=0.75 lines="1"}
| render

```

I tried also:

```auto
filters group="group3" ungrouped=true
| essql 
  query="SELECT DAY(date) as dd, MIN(date) as realDate, DATE_DIFF('hours',MIN(date),MAX(date)) as diff FROM \"application_data_bridgenuzoo\" GROUP BY DAY(date)"
| mapColumn name="formatted_date" expression={getCell "realDate" | formatdate format="DD/MM/YY"}
| pointseries x="formatted_date" y="diff"
| sort by="x" reverse=false
| plot defaultStyle={seriesStyle bars=0.75 lines="1"}
| render

```

with and without reverse...nothing.  
I tried:

```auto
filters group="group3" ungrouped=true
| essql 
  query="SELECT DAY(date) as dd, MIN(date) as realDate, DATE_DIFF('hours',MIN(date),MAX(date)) as diff FROM \"application_data_bridgenuzoo\" GROUP BY MONTH(date)"
| mapColumn name="formatted_date" expression={getCell "realDate" | formatdate format="DD/MM/YY"}
| pointseries x="formatted_date" y="diff"
| plot defaultStyle={seriesStyle bars=0.75 lines="1"}
| render

```

but I have a error:

```
Found 1 problem line 1:8: Cannot use non-grouped column [date], expected [MONTH(date)]

```

I tried all...

---

<div class="post-metadata">

### Author: ![accateo](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/accateo/32/85332_2.png) [@accateo](https://discuss.elastic.co/u/accateo)
#### Post date: [June 1, 2021, 7:21am UTC](https://discuss.elastic.co/t/kibana-essql-query-date-diff/271483/16 "2021-06-01T07:21:39Z")

</div>

Help please...

---

<div class="post-metadata">

### Author: ![flash1293](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/flash1293/32/41227_2.png) [@flash1293](https://discuss.elastic.co/u/flash1293)
#### Post date: [June 16, 2021, 12:03pm UTC](https://discuss.elastic.co/t/kibana-essql-query-date-diff/271483/17 "2021-06-16T12:03:47Z")

</div>

You need to do the sort before `pointseries` and specify the column name instead of `x`. Also, what Felix wanted to say is to use `GROUP BY month(date)` instead of `day(date)`

---

<div class="post-metadata">

### Author: ![accateo](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/accateo/32/85332_2.png) [@accateo](https://discuss.elastic.co/u/accateo)
#### Post date: [June 16, 2021, 12:21pm UTC](https://discuss.elastic.co/t/kibana-essql-query-date-diff/271483/18 "2021-06-16T12:21:57Z")

</div>

My code:

```auto
filters group="group3" ungrouped=true
| essql 
  query="SELECT DAY(date) as dd, MIN(date) as realDate, DATE_DIFF('hours',MIN(date),MAX(date)) as diff FROM \"application_data_bridgenuzoo\" GROUP BY DAY(date) LIMIT 10"
| mapColumn name="formatted_date" expression={getCell "realDate" | formatdate format="DD/MM"}
| sort by="x" reverse=false
| pointseries x="formatted_date" y="diff"
| plot defaultStyle={seriesStyle bars=0.75}
| render

```

The result:

 ![Cattura](https://us1.discourse-cdn.com/elastic/original/3X/e/3/e3ca53a4cb77394ee28daf610940705dfa3eab76.png)

My data:

 ![Cattura2](https://us1.discourse-cdn.com/elastic/original/3X/9/a/9ae9110e01f89448339ef7615bbdb02c94b3712c.png)

Something wrong...

---

<div class="post-metadata">

### Author: ![flash1293](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/flash1293/32/41227_2.png) [@flash1293](https://discuss.elastic.co/u/flash1293)
#### Post date: [June 16, 2021, 12:29pm UTC](https://discuss.elastic.co/t/kibana-essql-query-date-diff/271483/19 "2021-06-16T12:29:48Z")

</div>

Can you explain what you want to see?

---

<div class="post-metadata">

### Author: ![accateo](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/accateo/32/85332_2.png) [@accateo](https://discuss.elastic.co/u/accateo)
#### Post date: [June 16, 2021, 12:44pm UTC](https://discuss.elastic.co/t/kibana-essql-query-date-diff/271483/20 "2021-06-16T12:44:47Z")

</div>

I have a series of such data :

"deviceID" | "date"  
35001 | 27-04-21 13:20:00  
35002 | 27-04-21 15:21:00  
35001 |27-04-21 18:22:00  
35002 |27-04-21 19:30:00

I would like to obtain as a result a bar graph in Canavas which, divided by days and deviceId,  
show the difference between the various times.  
Then:  
35001 27-04-21 5 hours  
35002 27-04-21 4 hours

---

<div class="post-metadata">

### Author: ![flash1293](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/flash1293/32/41227_2.png) [@flash1293](https://discuss.elastic.co/u/flash1293)
#### Post date: [June 16, 2021, 12:49pm UTC](https://discuss.elastic.co/t/kibana-essql-query-date-diff/271483/21 "2021-06-16T12:49:41Z")

</div>

I meant what's wrong with the output you screenshotted in the post above

[Next page](https://discuss.elastic.co/t/kibana-essql-query-date-diff/271483.md?page=2)
