Grafana supports SQL through MySQL/MariaDB, PostgreSQL & SQL Server. Additionally Grafana supports the PostgreSQL extension TimescaleDB, this database is the best fit of all the SQL databases for Grafana since it is built specifically for large-scale time-series datasets.
Below is an example of a Timescale query using
time_bucket_gapfill function from Timescale to pad missing values. You will also need to populate or swap out the Grafana templating variables I used, they save a lot of time once your dashboards start to grow.
SELECT time_bucket_gapfill('$step', time) AS "time", category AS category, avg(metric) AS metric FROM $table WHERE $__timeFilter(time) AND metric IS NOT NULL GROUP BY 1,2 ORDER BY 1,2
$step represents an amount of time to group the data by, such as 1month, 1day, 1minute.