我正在使用MySQL从数据表返回列。我要执行的操作是使用Order By按日期字段按升序对结果进行排序,然后还返回一个自定义列以及其他所需的列,其中该自定义列表示相对于Order By结果的索引。正确,我有以下查询,该查询仅返回所需的列并对结果进行排序:

SELECT
    `alert_id`,
    `message`,
    `expiration`
FROM
    `alert`
WHERE
    `is_active` = TRUE
ORDER BY
    `expiration`


但是我遇到的困难是如何还返回代表订单的自定义列。因此,例如,我希望返回以下(示例数据)行:

  Pior to Order and Custom Column           After the Order and Custom Column
+----------+---------+------------+  +----------+---------+------------+----------+
| alert_id | message | expiration |  | alert_id | message | expiration | order_by |
+----------+---------+------------+  +----------+---------+------------+----------+
|    1     |  alert1 | 2017-11-20 |  |    5     |  alert5 | 2017-11-16 |     1    |
|    5     |  alert5 | 2017-11-16 |  |    6     |  alert6 | 2017-11-17 |     2    |
|    6     |  alert6 | 2017-11-17 |  |    1     |  alert1 | 2017-11-20 |     3    |
+----------+---------+------------+  +----------+---------+------------+----------+

最佳答案

在AdrianE的帮助下,提到ROW_NUMBER函数,即使我使用的是MySQL并且该函数不可用,我也可以使用以下命令来模拟该函数:

SET @order = 0;
SELECT
    `alert_id`,
    `message`,
    DATE_FORMAT(`expiration`, '%M %D, %Y') AS formatted_date,
    (@order := @order + 1) AS order_by
FROM
    `alert`
WHERE
    `is_active` = TRUE
ORDER BY
    `expiration`;

关于mysql - 自定义列代表订单,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47339276/

10-08 20:43