SQL: ЗАКАЗАТЬ ASC с LIMIT

0

Мой 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']],
    })
Теги:
sequelize.js

3 ответа

0

вам нужен порядок по 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
  • 0
    @ Занюль, нет. Мне нужен ASC, потому что если я использую DESC, он перевернет мои результаты на 180 градусов.
  • 0
    @actpromiseprob2, затем используйте подзапрос и используйте порядок asc, как и остальные ответы.
0

Вам нужен подзапрос для 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
  • 0
    О боже, я использую Sequelize ORM (я редактировал свой пост), и я не знаю, как я могу сделать это ^
  • 0
    Измени вопрос, сделай ответ бессмысленным .. проверь, можешь ли ты ORM управлять сырым sql .. иначе ты мог бы упорядочить результат на уровне презентации ..
0

Вы можете использовать свой запрос в качестве подзапроса, изменив его так, чтобы получить последние 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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню