排序查询以从上一行值中减去值

时间:2018-12-11 05:30:51

标签: node.js postgresql sequelize.js

我正在使用PostgreSQL。我的桌子上有阅读价值。从那里,我必须减去之前的值来找到消耗量。

我找到了SQL查询。如何在续集中使用它?除了原始查询,还有其他选择吗?

SQL查询:

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

3 个答案:

答案 0 :(得分:0)

我不知道这是否有帮助,但是您也可以避免使用Form1,而是使用相关子查询来查找滞后值:

public class Form2: Form 
{
    //{...}
    private string _selectedPath;
    public Form2(string selectedPath) 
    { 
        _selectedPath = selectedPath;
    }
    //{...}
    private void Form2_Load(object sender, EventArgs e)
    {       
       webBrowser1.Url = new Uri(_selectedPath);
    }
}


private void Showfrm2Btn_Click(object sender, EventArgs e)
{
   Form2 Frm2 = new Form2(txtpath.Text);
   Frm2.ShowDialog();
}

使用您的JavaScript ORM框架,这也许更容易表达出来。

答案 1 :(得分:0)

我们可以将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']
    })

答案 2 :(得分:0)

您可以使用连续字面量来做到这一点。

model.update({'count': sequelize.literal('count + 1')}, { where: { id: 1 }})

您也可以使用增量方法来做到这一点。

Model.increment('seq', { by: 5, where: { id: 'model_id' });