我有以下查询GROUP BY与SUM和最新日期
SELECT
TableA.MaterialCode,
TableB.LotNumber,
SUM(TableB.Quantity) AS Quantity,
CONVERT(varchar(25), TableC.IssueDate, 121) AS IssueDate
FROM TableA
INNER JOIN
TableB ON TableA.PONumber = TableB.PONumber
INNER JOIN
TableC ON TableA.PONumber = TableC.PONumber
WHERE TableC.VendorID = 'VendorID'
AND TableC.IssueDate > '10/25/2016 9:47:53 AM'
GROUP BY MaterialCode, LotNumber, IssueDate
ORDER BY TableC.IssueDate DESC
它返回一个数据集,像这样:
╔══════════════╦═══════════╦══════════╦═════════════════════════╗
║ MaterialCode ║ LotNumber ║ Quantity ║ IssueDate ║
╠══════════════╬═══════════╬══════════╬═════════════════════════╣
║ 12345 ║ 3451972 ║ 55 ║ 2016-10-25 10:48:13.210 ║
║ 12346 ║ 3436055 ║ 32 ║ 2016-10-25 09:57:26.693 ║
║ 12346 ║ 3436055 ║ 224 ║ 2016-10-25 09:47:54.077 ║
╚══════════════╩═══════════╩══════════╩═════════════════════════╝
我想通过IssueDate就这一点,而不是分组扩大,以获得小组中的最新日期。我曾尝试下面的代码,但它引发错误...because it is not contained in either an aggregate function or the GROUP BY clause.
SELECT
TableA.MaterialCode,
TableB.LotNumber,
SUM(TableB.Quantity) AS Quantity,
MAX(CONVERT(varchar(25), TableC.IssueDate, 121)) AS IssueDate
FROM TableA
INNER JOIN
TableB ON TableA.PONumber = TableB.PONumber
INNER JOIN
TableC ON TableA.PONumber = TableC.PONumber
WHERE TableC.VendorID = 'VendorID'
AND TableC.IssueDate > '10/25/2016 9:47:53 AM'
GROUP BY MaterialCode, LotNumber
ORDER BY TableC.IssueDate DESC
这是我希望得到与上述查询的输出:
╔══════════════╦═══════════╦══════════╦═════════════════════════╗
║ MaterialCode ║ LotNumber ║ Quantity ║ IssueDate ║
╠══════════════╬═══════════╬══════════╬═════════════════════════╣
║ 12345 ║ 3451972 ║ 55 ║ 2016-10-25 10:48:13.210 ║
║ 12346 ║ 3436055 ║ 256 ║ 2016-10-25 09:57:26.693 ║
╚══════════════╩═══════════╩══════════╩═════════════════════════╝
我怎样才能改变我的查询来实现上述数据集?
在这两个查询中,您选择'TableA.PONumber',但它不在结果集中,也不在'group by'中。我本来希望这两个查询都会失败。 – HoneyBadger
此外,您应该在日期列上使用'max',并稍后转换为'varchar'。 'varchar'值上的'max'可以(通常会)导致意想不到的结果。 – HoneyBadger
因此:应该在查询和输出中包含“TableA.PONumber”还是排除? –