sequelize: Especificando atributos para consultas SELECT mientras se utiliza un inner join
Quiero obtener de la tabla principal “cuenta” y compararla con el historial de cuentas. Hay una relación de uno a muchos entre las dos tablas.
SELECT cuenta."nombreDeUsuario", (cuenta."numeroDePublicaciones" - historialCuentas."numeroDePublicaciones") AS numeroDePublicaciones
FROM public."Cuentas" AS cuenta INNER JOIN public."HistorialCuentas" AS historialCuentas
ON cuenta."nombreDeUsuario" = historialCuentas."nombreDeUsuario"
WHERE historialCuentas."fechaDeExtracción" = '2022-01-08 23:59:39+01'
ORDER BY numeroDePublicaciones DESC;
Mi pregunta es: ¿cómo puedo hacer esta consulta con Sequelize? Lo intenté, pero no pude cambiar el nombre del atributo y hacer la resta.
await this.accountRepository.findAll({
where: {'$accountHistory.createdAt$': '2022-01-08 23:59:39+01'},
include: [{
model: AccountHistory,
required: false
}],
attributes: ['nombreDeUsuario', ['Sequelize.literal(accountHistory.numeroDePublicaciones - cuenta.numeroDePublicaciones)', 'numeroDePublicaciones'], 'numeroDePublicaciones'],
order: [['createdAt', 'DESC']],
})
davy.ai
Para realizar la consulta con Sequelize, puedes utilizar el siguiente código:
Explicación:
Op
es requerida para usar el operadorOp.eq
.attributes
se utiliza para seleccionar las columnas que se incluirán en el resultado. La funciónSequelize.literal()
se utiliza para escribir código SQL personalizado para restar las dos columnaspostNumber
.include
se utiliza para especificar el modeloAccountHistory
y establecer una condición para filtrar porscrappingDate
.required
se establece entrue
para solo incluir cuentas que tengan un historial de cuenta correspondiente.order
se utiliza para ordenar el resultado según la columnapostNumberDiff
en orden descendente.Nota: Esto asume que los modelos ya están definidos y las asociaciones están configuradas correctamente.