我是SQL server
的新手,所以如果这被认为是一个简单的问题我会道歉。
我正在使用示例sales.orders
中的表sales.customers
,TSQL 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,但我不知道怎么写它才能获得
答案 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
您的查询版本未考虑该月份。