postgresql - 如何使用 postgresql 和 kenx.js 从表中查询最近 3 个月的行
问题描述
我正在使用在节点服务器上运行的 Postgresql db 和 Knenx,并尝试编写一个查询表的函数customeractivity
(如下图所示)。我的目标是检索与customernbr
. 我编写了getRecentTransaction
如下所述的函数:
getRecentTransaction = async (customerId, db) => {
return await db('customeractivity')
.select('docdesc', 'origdocamt', 'docdate',)
.whereRaw(`docdate < INTERVAL '? month'`, [1])
.andWhere('customernbr', '=', `${customerId}`)
.then(recentTransaction => recentTransaction[0])
.catch(error => Promise.reject(error));
}
正如你们所看到的,我能够使用 PSequel 来检索正确的数据。但是,我正在努力用 Knex 编写相同的查询。
解决方案
您提供的 SQL 是:
SELECT * FROM customeractivity
WHERE docdate > CURRENT_DATE - INTERVAL '3 months'
AND customernbr = '713610'
ORDER BY docdate DESC;
此查询的 Knex 版本是:
knex('customeractivity')
.where('docdate', '>', knex.raw(`CURRENT_DATE - '3 MONTH'::INTERVAL`))
.andWhere('customernbr', '713610');
请注意,这return await
是多余的(并且不会做您可能期望的事情)。您真正需要做的就是返回 Knex 链:
const getRecentTransaction = (customerId, db) =>
db('customeractivity')
.where('docdate', '>', knex.raw(`CURRENT_DATE - '3 MONTH'::INTERVAL`))
.andWhere('customernbr', customerId);
并在调用代码中等待它:
const result = await getRecentTransaction(5, db);
推荐阅读
- c# - 从 .net core 3.1 中的 appsettings.json 获取值
- clojure - 将地图列表“展平”为clojure中的单个地图?
- encoding - 带有标签均值的测试集目标编码
- java - 使用子类测试抽象类中的具体方法
- c# - Convert.ChangeType() 是否只返回对传递值的不同类型的引用?
- javascript - 为什么无法在@material-ui 中设置成功按钮的样式
- angular - 第一秒后可观察到的返回,他们有不同的超时
- apache-kafka - Kafka Streams - 在流线程开始处理之前恢复全局状态存储
- sql-server - SQL Server 允许您删除另一个过程所依赖的过程?
- firebase - 有什么方法可以在 Firebase Cloud Functions 中使用 Cordova 插件?