I want to fetch from the main table account and compare it with account history. there is a relationship On To many between the two table
SELECT account."userName", (account."postNumber" - accountHistory."postNumber") AS postNumber
FROM public."Accounts" AS account INNER JOIN public."AccountHistories" AS accountHistory
ON account."userName" = accountHistory."userName"
WHERE accountHistory."scrappingDate" = '2022-01-08 23:59:39+01'
ORDER BY postNumber DESC;
My question is how can I make the query with sequilize? I tried but I could not change the name of the attribute and do the subtraction
await this.accountRepository.findAll({
where: {'$accountHistory.createdAt$' : '2022-01-08 23:59:39+01'},
include: [{
model: AccountHistory,
required: false
}],
attributes: ['userName',['$accountHistory.postNumber $', 'postNumber '],postNumber ],
order: [[$accountHistory.createdAt$', 'DESC']],
})
You probably need to use Sequelize.literal to perform the calculation as an aliased attribute, e.g.:
const { literal } = require('sequelize')
await this.accountRepository.findAll({
where: {'$accountHistory.createdAt$' : '2022-01-08 23:59:39+01'},
include: [{
model: AccountHistory,
required: false
}],
attributes: [
'userName',
[
literal('"account"."postNumber" - "accountHistory"."postNumber"'),
'postNumber'
]
],
order: [[$accountHistory.createdAt$', 'DESC']],
})
That exact syntax might not work depending on your SQL dialect - I'm not familiar with the $
symbols you are using