【问题标题】:How can I select other table fields when using GROUP BY and MAX?使用 GROUP BY 和 MAX 时如何选择其他表字段?
【发布时间】:2017-05-25 07:52:56
【问题描述】:

假设我有一个名为 Orders 的表和字段 CustomerId、EmployeeId、OrderDate

我想在最新的 OrderDate 之前为每个 CustomerId 选择所有这些字段。

到目前为止,我已经成功选择了 CustomerId 和 OrderDate,但我不知道如何包含 EmployeeId

 SELECT [CustomerId], MAX(OrderDate)
      FROM [Orders] 
      GROUP BY [CustomerId]
      ORDER BY [CustomerId]

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:

    使用row_number():

    select o.*
    from (select o.*,
                 row_number() over (partition by customerid order by orderdate desc) as seqnum
          from orders o
         ) o
    where seqnum = 1;
    

    这是“传统”的解决方案。如果您有所有客户的列表,我喜欢使用cross apply 的解决方案:

    select o.*
    from customers c cross apply
         (select top 1 o.*
          from orders o
          where o.customerid = c.customerid
          order by o.orderdate desc
         ) o;
    

    【讨论】:

    • 几乎...需要按orderdate DESC订购
    猜你喜欢
    • 1970-01-01
    • 2019-01-25
    • 2010-11-21
    • 2023-04-03
    • 2015-11-11
    • 2021-10-03
    • 2022-10-23
    • 2022-01-11
    • 1970-01-01
    相关资源
    最近更新 更多