0

我是新手,SQL server所以如果这被认为是一个简单的问题,我深表歉意。

我正在使用来自示例sales.orders的表格。sales.customersTSQL 2012 database

我知道这是错误的,但到目前为止我只能串起来

SELECT cust.custid, ord.orderid, ord.orderdate
FROM sales.customers as cust
INNER JOIN sales.orders as ord ON (ord.custid=cust.custid)
AND ord.orderid = (SELECT TOP 1 ord.orderid
                FROM sales.orders
                WHERE cust.custid=ord.custid 
                ORDER BY ord.orderdate DESC);

我觉得我应该在子查询中使用 MAX 某人,但我不知道如何编写它以获得

  1. 每个客户的最新商品
  2. 每个月内。
4

1 回答 1

1

对于这种类型的查询,我row_number特别喜欢使用排名函数。以下查询使用 seqnum 确定每个客户每月的最新订单,然后选择它:

select cust.custid, ord.orderid, ord.orderdate
from sales.customers cust INNER JOIN
     (select o.*,
             ROW_NUMBER() over (partition by custid, yr, mon order by orderdate desc) as seqnum
      from (select o.*, YEAR(o.orderdate) as yr, MONTH(o.orderdate) as mon
            from sales.orders o
           )
     ) ord
     on cust.custid = ord.custid and
        ord.seqnum = 1

您的查询版本没有考虑月份。

于 2012-12-18T16:19:00.430 回答