使用Group BY

时间:2018-01-16 14:49:52

标签: mysql sql group-by auto-increment

我有两张表如下:

合同

Contract |

Contractuser

Contractuser

我的工作是从Contractuser表中获取每个合约编号的最新发票日期并显示结果。结果表如下:

结果表

Result Table

现在我想要一个自动增量列显示为结果集中的第一列。

我使用了以下查询:

SELECT @i:=@i+1 AS Sno,a.ContractNo,a.SoftwareName,a.CompanyName,b.InvoiceNo,b.InvoiceDate,
b.InvAmount,b.InvoicePF,max(b.InvoicePT) AS InvoicePeriodTo,b.InvoiceRD,b.ISD
     FROM contract as a,contractuser as b,(SELECT @i:=0) AS i
     WHERE a.ContractNo=b.ContractNo
     GROUP BY b.ContractNo
     ORDER BY a.SoftwareName ASC;

但似乎自动增量在程序组之前执行,因为序列号以不连续的方式显示。

1 个答案:

答案 0 :(得分:0)

GROUP BY并且变量不一定按预期工作。只需使用子查询:

SELECT (@i := @i + 1) AS Sno, c.*
FROM (SELECT c.ContractNo, c.SoftwareName, c.CompanyName, cu.InvoiceNo, cu.InvoiceDate,
             cu.InvAmount, cu.InvoicePF, max(cu.InvoicePT) AS InvoicePeriodTo, cu.InvoiceRD, cu.ISD
      FROM contract c JOIN
           contractuser as b
           ON c.ContractNo = cu.ContractNo
      GROUP BY cu.ContractNo
      ORDER BY c.SoftwareName ASC
     ) c CROSS JOIN
     (SELECT @i := 0) params;

注意:

  • 我还修复了JOIN语法。 从不FROM子句中使用逗号。
  • 我还添加了合理的表别名 - 表格的缩写。 ab并不代表任何内容,因此它们会使查询更难以遵循。
  • 我只用一把钥匙离开GROUP BY。它应该具有所有未聚合的密钥,但在某些情况下允许这样做。