SQL Server,使用group by和date列进行选择

时间:2018-03-26 22:16:54

标签: sql-server select group-by maxdate

我有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

我想写一个查询来获得如下结果:

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

从我的新手角度看,我需要按OrderNumber'分组。但我不知道还有什么。第二个问题是" MAXOrderDate"或者" MAXSentDate"。我也不知道如何从日期中选择最大值。

我真的很感激任何帮助。

2 个答案:

答案 0 :(得分:3)

简单,

应该是 - 只要您汇总数据,就不需要按该列分组(例如.. min,max,avg等,...所以你对groupby ordernumber的原始想法应该足够了)

Try the sql 


select 
    tbl_Orders.ordernumber as OrderNumber
    , sum(tbl_Orders.qty) as qty
    ,max(tbl_Orders.orderdate) as orderdate
    ,max(tbl_Orders.sentdate) as sentdate

    from tbl_Orders 

    group by
    tbl_Orders.ordernumber

答案 1 :(得分:0)

您必须在MAXOrderDate上加上Qty,max,在MAXSentDate上加上max,然后按OrderNumber进行分组,如:

SELECT OrderNumber, sum(Qty) As Qty, max(MAXOrderDate) As OrderDate, max(MAXSentDate) AS SentDate 
FROM tbl_Orders (NOLOCK) 
GROUP BY OrderNumber

我会使用NOLOCK来避免在高性能环境中阻止其他查询。请注意,NOLOCK可以引入尚未提交的事务中的结果记录。