Мой SQL-запрос для MySQL DB:
SELECT 'id', 'id_sender', 'id_recipient', 'date_time', 'amount_money', 'id_currency', 'transfer_title', 'authorization_key', 'authorization_status'
FROM 'bankapplication_transactions' AS 'transaction'
WHERE (('transaction'.'date_time'
BETWEEN '2019-03-21 08:56:22' AND '2019-04-21 07:56:22'
AND 'transaction'.'authorization_status' = 1)
AND ('transaction'.'id_sender' = 3 OR 'transaction'.'id_recipient' = 3))
ORDER BY 'transaction'.'date_time' ASC
Мой результат:
id | id_sender | id_recipient | date_time | ...
2 | 1 | 3 | 2019-04-21 07:51:25 | ...
4 | 4 | 3 | 2019-04-21 07:52:38 | ...
5 | 3 | 4 | 2019-04-21 07:54:39 | ...
Я хотел бы сделать ограничение 2, и что он вернет последние два результата, но пусть он будет продолжать манипулировать с ASC, поэтому мне нужно:
id | id_sender | id_recipient | date_time | ...
4 | 4 | 3 | 2019-04-21 07:52:38 | ...
5 | 3 | 4 | 2019-04-21 07:54:39 | ...
Я использую Sequelize ORM для NodeJS, так что это мой контроллер:
Transaction.findAll({
where: db.Sequelize.and(
{
date_time: {
[Op.between]: [
getPreviousMonthDate(getTodayDate()),
getTodayDate(),
],
},
authorization_status: setAuthorizationStatus(1),
},
db.Sequelize.or({ id_sender: userId }, { id_recipient: userId }),
),
order: [['date_time', 'ASC']],
})
вам нужен порядок по desc и limit 2
SELECT 'id', 'id_sender', 'id_recipient', 'date_time', 'amount_money', 'id_currency', 'transfer_title', 'authorization_key', 'authorization_status'
FROM 'bankapplication_transactions' AS 'transaction'
WHERE (('transaction'.'date_time'
BETWEEN '2019-03-21 08:56:22' AND '2019-04-21 07:56:22'
AND 'transaction'.'authorization_status' = 1)
AND ('transaction'.'id_sender' = 3 OR 'transaction'.'id_recipient' = 3))
ORDER BY 'transaction'.'date_time' desc
lmit 2
Вам нужен подзапрос для limit2, а затем упорядочить по asc
select t.* from (
SELECT 'id', 'id_sender', 'id_recipient', 'date_time', 'amount_money', 'id_currency', 'transfer_title', 'authorization_key', 'authorization_status'
FROM 'bankapplication_transactions' AS 'transaction'
WHERE (('transaction'.'date_time'
BETWEEN '2019-03-21 08:56:22' AND '2019-04-21 07:56:22'
AND 'transaction'.'authorization_status' = 1)
AND ('transaction'.'id_sender' = 3 OR 'transaction'.'id_recipient' = 3))
ORDER BY 'transaction'.'date_time' desc
lmit 2
) t
order by transaction'.'date_time' ASC
Вы можете использовать свой запрос в качестве подзапроса, изменив его так, чтобы получить последние 2 значения в порядке убывания, а затем упорядочить полученный результат по возрастанию:
SELECT *
FROM (SELECT 'id', 'id_sender', 'id_recipient', 'date_time', 'amount_money', 'id_currency', 'transfer_title', 'authorization_key', 'authorization_status'
FROM 'bankapplication_transactions' AS 'transaction'
WHERE (('transaction'.'date_time'
BETWEEN '2019-03-21 08:56:22' AND '2019-04-21 07:56:22'
AND 'transaction'.'authorization_status' = 1)
AND ('transaction'.'id_sender' = 3 OR 'transaction'.'id_recipient' = 3))
ORDER BY 'transaction'.'date_time' DESC
LIMIT 2) t
ORDER BY 'date_time' ASC