制作包含所有客户的表格以及每个客户的最后订单

时间:2018-01-30 13:33:54

标签: sql sql-server

让我们说,我有两个表:客户和订单。我需要获得包含所有客户及其最后订单的结果。

我正在尝试进行此查询,因为我的更大目标是迭代所有客户及其最后订单以获取重要信息。我试图用光标做这个,所以我需要那个表。

CNC中 我在SQL 2014服务器上有MSSQL数据库。 我有一对多的关系,客户有很多订单。

我需要使用不同的数据模式将数据从一个数据库迁移到另一个数据库。我想过使sql脚本从一个数据库中获取数据,然后使用游标和变量将数据插入到新数据库中。记录不多,因此性能不是问题。

2 个答案:

答案 0 :(得分:0)

让我们Customer(cid PK, and possibly other columns)Orders(cid FK, order_time)拥有1:N基数。解决方案可以是以下几点:

select c.*, o.*
from customer c
join orders o on c.cid = o.cid
join
(
  select cid, max(order_time) max_order_time
  from orders
  group by cid
) t on o.cid = t.cid and
       o.order_time = t.max_order_time

答案 1 :(得分:0)

我的第一个想法是使用row_number()

select
from customer c join
     (select o.*, row_number() over (partition by cid order by order_time desc) as seqnum
      from orders o
      where order_time < '2018-01-01' and order_time >= '2017-01-01'
     ) o
     on c.cid = o.cid and o.seqnum = 1;