0

Before

| collected_at        | currency | price   | 
+---------------------+----------+---------+
| 2017-10-03 03:48:00 | BTC      | 4800000 |
| 2017-10-03 03:48:00 | ETH      | 300000  |
| 2017-10-03 03:48:30 | BTC      | 4850000 |
| 2017-10-03 03:48:30 | ETH      | 310000  |
| 2017-10-03 03:49:00 | BTC      | 4800000 |
| 2017-10-03 03:49:00 | ETH      | 320000  |
| 2017-10-03 03:49:30 | BTC      | 4850000 |
| 2017-10-03 03:49:30 | ETH      | 310000  |
| 2017-10-03 03:50:00 | BTC      | 4800000 |
| 2017-10-03 03:50:00 | ETH      | 300000  |
| 2017-10-03 03:50:30 | BTC      | 4810000 |
| 2017-10-03 03:50:30 | ETH      | 310000  |

After

| collected_at     | currency | price(avg) | 
+------------------+----------+------------+
| 2017-10-03 03:48 | BTC      | 4825000    |
| 2017-10-03 03:48 | ETH      | 305000     |
| 2017-10-03 03:49 | BTC      | 4825000    |
| 2017-10-03 03:49 | ETH      | 315000     |
| 2017-10-03 03:50 | BTC      | 4805000    |
| 2017-10-03 03:50 | ETH      | 305000     |

I want to aggregate prices on same minute unit to one average price for each currency like above by only one sql statement. for example,

| 2017-10-03 03:48:00 | BTC      | 4800000 |
| 2017-10-03 03:48:30 | BTC      | 4850000 |

These two rows above should be aggregate into one average price 4825000 like below.

| 2017-10-03 03:48 | BTC      | 4825000    |

I want to do this work only by one sql statement.

For additional information, collected_at column has timestamp data type. And, I am using mysql database.

bumkeyman
  • 1
  • 1

1 Answers1

0
SELECT CONVERT(DATE_FORMAT(collected_at,'%Y-%m-%d-%H:%i:00'),DATETIME) as dt,
       currency,
       AVG(price)
FROM yourTable
GROUP BY CONVERT(DATE_FORMAT(collected_at,'%Y-%m-%d-%H:%i:00'),DATETIME),
       currency,
Juan Carlos Oropeza
  • 47,252
  • 12
  • 78
  • 118