Browse Source

set explicit order for rate and increase

Sven Klemm 7 years ago
parent
commit
7af9cd7dfc

+ 10 - 2
public/app/plugins/datasource/postgres/postgres_query.ts

@@ -136,16 +136,24 @@ export default class PostgresQuery {
     query = columnName.params[0];
 
     let aggregate = _.find(column, (g: any) => g.type === 'aggregate');
+    let special = _.find(column, (g: any) => g.type === 'special');
+
     if (aggregate) {
-      query = aggregate.params[0] + '(' + query + ')';
+      if (special) {
+        query = aggregate.params[0] + '(' + query + ' ORDER BY ' + this.target.timeColumn + ')';
+      } else {
+        query = aggregate.params[0] + '(' + query + ')';
+      }
     }
 
-    let special = _.find(column, (g: any) => g.type === 'special');
     if (special) {
       let over = '';
       if (this.hasMetricColumn()) {
         over = 'PARTITION BY ' + this.target.metricColumn;
       }
+      if (!aggregate) {
+        over += 'ORDER BY ' + this.target.timeColumn;
+      }
       switch (special.params[0]) {
         case 'increase':
           query = query + ' - lag(' + query + ') OVER (' + over + ')';

+ 1 - 1
public/app/plugins/datasource/postgres/specs/postgres_query.jest.ts

@@ -63,7 +63,7 @@ describe('PostgresQuery', function() {
       { type: 'alias', params: ['a'] },
       { type: 'special', params: ['increase'] },
     ];
-    expect(query.buildValueColumn(column)).toBe('v - lag(v) OVER () AS "a"');
+    expect(query.buildValueColumn(column)).toBe('v - lag(v) OVER (ORDER BY time) AS "a"');
   });
 
   describe('When generating WHERE clause', function() {