查询以获取客户的第二个订单日期(SQL 2014)

时间:2015-02-26 19:55:47

标签: sql sql-server date ranking sql-server-2014

我有一个包含客户,订单和订单日期的架构。 客户可以在多个日期订购。我需要一个计算成员来将第一个订单日期和第二个订单日期与其他相关指标联系起来。 我能够使用min(订单日期)作为第一个订单获得第一个订单日期和关联数据,但是有问题查询第二个订单日期。任何建议都会有所帮助!谢谢

我的查询

---我在一个表中有所有信息,所以我的查询看起来像

选择customerid,order id,min(orderdate)作为firstorderdate,... 来自客户,在2015年1月1日'和GETDATE()

之间的第一个地方

(因为我只想要那些今年首次购买的客户)

查询他们的第二次购买

从中选择customerid,orderid,orderdate(select customerid,  orderid,orderdate,rwo_number()over(由customerid分区,   来自客户的orderdate订单 其中rn <= 2

1 个答案:

答案 0 :(得分:0)

如果没有看到您当前的查询,就很难理解。我假设您当前的查询是这样的:

select c.customerid, o.orderid, min(od.orderdate)
from customers c
    join orders o on c.customerid = o.customerid
    join orderdates od on o.orderid = od.orderid
group by c.customerid, o.orderid

执行相同查询的另一种方法是使用row_number。这样做,你不仅仅局限于小组中的第一个:

select customerid, orderid, orderdate
from (
    select c.customerid, o.orderid, od.orderdate, 
        row_number() over (partition by c.customerid, o.orderid
                           order by od.orderdate) rn
    from customers c
        join orders o on c.customerid = o.customerid
        join orderdates od on o.orderid = od.orderid
) t
where rn <= 2