使用 Group BY 自增
Auto-increment with Group BY
我有两个table如下:
合同
|
合同用户
我的工作是从 Contractuser table 获取每个合同编号的 最新发票日期 并显示结果。结果table如下:
结果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;
但似乎自动递增 在 group by 过程之前执行,因为序列号以非连续的方式显示。
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
子句中使用逗号。
- 我还添加了合理的 table 别名 -- table 的缩写。
a
和 b
没有任何意义,因此它们使查询更难理解。
- 我只用一把钥匙离开了
GROUP BY
。它确实应该具有所有未聚合的键,但在某些情况下这是允许的。
我有两个table如下:
合同
合同用户
我的工作是从 Contractuser table 获取每个合同编号的 最新发票日期 并显示结果。结果table如下:
结果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;
但似乎自动递增 在 group by 过程之前执行,因为序列号以非连续的方式显示。
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
子句中使用逗号。 - 我还添加了合理的 table 别名 -- table 的缩写。
a
和b
没有任何意义,因此它们使查询更难理解。 - 我只用一把钥匙离开了
GROUP BY
。它确实应该具有所有未聚合的键,但在某些情况下这是允许的。