Запрос Sequelize для вычитания значения из предыдущего значения строки - PullRequest
0 голосов
/ 11 декабря 2018

Я использую PostgreSQL.У меня есть значение для чтения в моей таблице.Исходя из этого, я должен найти потребление путем вычитания предыдущего значения.

Я нашел запрос SQL.Как использовать это в sequelize?Есть ли другой вариант, кроме необработанных запросов?

SQL-запрос:

SELECT "readingValue",
       "readingValue" - COALESCE(LAG("readingValue") OVER
           (ORDER BY "readingTime")) AS consumption
FROM public."tableName" LIMIT 100;

Ответы [ 2 ]

0 голосов
/ 11 декабря 2018

Мы можем использовать sequelize.literal для поля в атрибутах.

model.findAll({
        where: whereConditionObj,
        attributes: ['id','readingValue',
            [
                db.sequelize.literal('"readingValue" - COALESCE(LAG("readingValue") OVER (ORDER BY "readingTime"))'), 'Consumption'
            ]
        ],
        order: [['readingTime', 'ASC']],
        group:['id', 'readingValue']
    })
0 голосов
/ 11 декабря 2018

Я не знаю, поможет ли это, но вы также можете избежать использования LAG и вместо этого использовать коррелированный подзапрос, чтобы найти значение задержки:

SELECT
    readingValue,
    readingValue - (SELECT t2.readingValue FROM public."tableName" t2
                    WHERE t2.readingValue < t1.readingValue
                    ORDER BY t2.readingValue DESC LIMIT 1) AS consumption
FROM public."tableName" t1;

Возможно, это будет проще сформулироватьиспользуя ваш JavaScript ORM Framework.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...