首先排序行,然后在MySQL

时间:2018-02-13 15:57:17

标签: mysql mariadb auto-increment

我喜欢做什么:

  • 首先:根据规则对列进行排序。
  • 第二:添加自动增量列,以便每行都有正确的顺序编号

到目前为止的问题:

我的代码最初只能创建auto-increment列,然后才会开始排序。这会导致自动增量列中的非顺序编号。

代码:

SET @i:=0;
SELECT
    @i:=@i+1 AS autoincr_id,
    billings.id AS bill_id,
    daily_reports.id AS report_id,
    billings.billingDate AS billing_date
FROM lineitems
    INNER JOIN billings
    ON billings.order_id=lineitems.orderID
    INNER JOIN daily_reports
    ON billings.`billingDate` BETWEEN DATE_ADD(daily_reports.`referenceDate`, INTERVAL 7 HOUR ) AND DATE_ADD(daily_reports.`referenceDate`, INTERVAL 31 HOUR )
ORDER BY billings.id, autoincr_id
LIMIT 200

见图解说明我的问题

enter image description here

2 个答案:

答案 0 :(得分:0)

猜猜使用提供的表来强制排序,然后使用该变量将解决您的问题。

您还可以使用CROSS JOIN初始化用户变量this.gridData,而无需使用两个查询。

<强>查询

@i

答案 1 :(得分:0)

创建一个new表,其中的行按所需顺序编号seq_num

CREATE TABLE new (
    seq_num INT UNSIGNED AUTO_INCREMENT,
    PRIMARY KEY seq_num
) ENGINE=InnoDB
    SELECT ...
        ORDER BY ...

警告:如果您处于多主复制设置中,AUTO_INCREMENT将不会有连续的ID。这是因为auto_increment_increment赢了1