需要创建一份报告,显示每个客户在过去一年内的最新订单

时间:2012-12-18 16:13:11

标签: sql sql-server

我是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. 每个月内。

1 个答案:

答案 0 :(得分: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

您的查询版本未考虑该月份。