diff --git a/kwollect/tools/kwollect_setup_db.py b/kwollect/tools/kwollect_setup_db.py
index 5f8a3ea39a6e013062857cb494a8906e516e5c59..4f54969086eeb8d765546c159ffd740a724eb7d9 100644
--- a/kwollect/tools/kwollect_setup_db.py
+++ b/kwollect/tools/kwollect_setup_db.py
@@ -306,19 +306,15 @@ UPDATE pg_language SET lanpltrusted = true WHERE lanname = 'plpython3u';
 
 SET LOCAL SESSION AUTHORIZATION {kwollect_user};
 
-DROP FUNCTION IF EXISTS api.get_metrics(job_id INTEGER,
-                                           nodes TEXT,
-                                           devices TEXT,
-                                           metrics TEXT,
-                                           start_time TEXT,
-                                           end_time TEXT);
+DROP FUNCTION IF EXISTS api.get_metrics;
 CREATE OR REPLACE FUNCTION api.get_metrics(job_id INTEGER DEFAULT NULL,
                                            nodes TEXT DEFAULT NULL,
                                            devices TEXT DEFAULT NULL,
                                            metrics TEXT DEFAULT NULL,
                                            start_time TEXT DEFAULT NULL,
                                            end_time TEXT DEFAULT NULL,
-                                           summary BOOLEAN DEFAULT FALSE)
+                                           summary BOOLEAN DEFAULT FALSE,
+                                           as_rate BOOLEAN DEFAULT FALSE)
 RETURNS SETOF metrics AS $$
 from plpy import spiexceptions
 
@@ -371,6 +367,22 @@ if metrics:
 
 req += " AND ".join(cond)
 req += " ORDER BY timestamp ASC"
+
+if as_rate:
+    req = "WITH cte AS (%s)" % req
+    req += "\\n" \
+"SELECT " \
+  "timestamp, device_id, metric_id, " \
+  "CASE WHEN timestamp = LAG(timestamp) OVER w THEN NULL " \
+     "WHEN LAG(value) OVER w IS NULL THEN NULL " \
+     "WHEN value < LAG(value) OVER w THEN MAX(value) OVER w - LAG(value) OVER w + value " \
+     "ELSE (value - LAG(value) OVER w) " \
+  "END / EXTRACT(epoch FROM timestamp - LAG(timestamp) OVER w) AS value, " \
+  "labels " \
+"FROM cte " \
+"WINDOW w AS (PARTITION BY metric_id, device_id, labels) "\
+"ORDER BY timestamp ASC"
+
 plpy.info(req)
 try:
     return plpy.execute(req)