根据特定日期 SQL 服务器后客户的第一个订单显示结果

Displaying results based on customer first order after specific date SQL Server

这些是我目前的结果

 CustomerID      OrderID    Date    TableFK
     1              1     2017-01-05    1
     1              2     2017-01-06    1
     1              3     2017-01-10    1
     2              4     2017-01-10    2
     2              5     2017-01-09    2
     2              6     2017-01-16    2

现在基本上我想要 return 在 '2017-01-09' 或之后下第一笔订单的客户

如果我使用

 WHERE Orders.Date > '2017-01-09'

我显然明白了

 CustomerID      OrderID    Date    TableFK
     1              3     2017-01-10    1
     2              4     2017-01-10    2
     2              5     2017-01-09    2
     2              6     2017-01-16    2

但我正在寻找的输出是

 CustomerID      OrderID    Date    TableFK
     2              4     2017-01-10    2
     2              5     2017-01-09    2
     2              6     2017-01-16    2

我怎样才能做到这一点?我有一个 SQL fiddle http://sqlfiddle.com/#!9/3d55d/2

使用 having 子句:

select o.TableFK as CustomerId
from Orders o
group by o.TableFK
having min(o.Date) >= '2017-01-09';

(SQL Fiddle 是 here。)

请注意,您不需要 joinCustomers,因为您想要的客户需要有订单。

关于命名的评论。 TableFK这个名字真的没什么意义。它根本没有描述该列。我喜欢让外键与它们所指的主键同名,所以 CustomerId 而不是 TableFK.

您可以使用内部联接和 where 子句来执行此操作。

在问题中使用你的 fiddle 的内容:

select o.* from orders o
inner join (
              select tableFK, min(date) as firstOrder
              from orders
              group by tableFK ) f
              on f.tableFK = o.tableFK
              where f.firstOrder >= '17-01-09'

我只是 运行 检查客户是否在您日期之前的订单 table 中有记录,如下所示:

SELECT *
FROM Customer c
INNER JOIN Orders o
ON c.CustomerID = o.TableFK
WHERE NOT EXISTS
(SELECT 1
FROM Orders
WHERE Orders.TableFK = o.TableFK
AND Date < '2017-01-09')

这应该适用于您创建的 fiddle。