SQL Server中带GROUP BY与日期列的SELECT查询需求
按订单号聚合统计的SQL查询方案
你需要对tbl_Orders表按订单号分组,汇总每个订单的总购买数量,同时提取该订单下最晚的下单日期和最晚的发货日期对吧?先确认下你的源表结构和数据:
源表结构与数据
| OrderNumber | ProductCode | Qty | OrderDate | SentDate |
|---|---|---|---|---|
| 1000 | A | 100 | 2018-03-01 00:30:51 | 2018-03-02 |
| 1000 | A | 150 | 2018-03-12 04:31:54 | 2018-03-13 |
| 1000 | B | 150 | 2018-03-11 03:34:51 | 2018-03-14 |
| 1001 | C | 200 | 2018-03-01 00:30:51 | 2018-04-02 |
| 1002 | D | 200 | 2018-03-01 00:30:51 | 2018-04-15 |
实现查询的SQL语句
你可以使用GROUP BY子句按OrderNumber分组,配合聚合函数SUM()计算总数量,MAX()获取日期的最大值:
SELECT OrderNumber, SUM(Qty) AS Qty, MAX(OrderDate) AS MAXOrderDate, MAX(SentDate) AS MAXSentDate FROM tbl_Orders GROUP BY OrderNumber;
查询结果说明
执行上述语句后,会得到你需要的格式结果:
| OrderNumber | Qty | MAXOrderDate | MAXSentDate |
|---|---|---|---|
| 1000 | 400 | 2018-03-12 04:31:54 | 2018-03-14 |
| 1001 | 200 | 2018-03-01 00:30:51 | 2018-04-02 |
| 1002 | 200 | 2018-03-01 00:30:51 | 2018-04-15 |
这里的逻辑很直观:
SUM(Qty)把同一订单号下的所有数量相加,得到总订货量MAX(OrderDate)找出该订单下所有记录里最新的下单时间MAX(SentDate)找出该订单下所有记录里最新的发货时间
内容的提问来源于stack exchange,提问作者damianm




