Как запросить последние 3 месяца строки из таблицы, используя postgresql и kenx. js - PullRequest
1 голос
/ 13 января 2020

Я использую Postgresql db и Knenx, работающий на сервере Node, и пытаюсь написать функцию, которая запрашивает таблицу customeractivity (показано в pi c ниже). Моя цель - получить последние 3 месяца строки, где она соответствует 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.

PSequel

1 Ответ

0 голосов
/ 14 января 2020

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...