簡體   English   中英

SQL:ORDER BY ASC with LIMIT

[英]SQL: ORDER BY ASC with LIMIT

我對 MySQL 數據庫的 SQL 查詢:

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 | ...

我為 NodeJS 使用 Sequelize ORM,所以這是我的控制器:

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 訂購並限制為 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM