SQL Server 2012 查询混乱

Posted

技术标签:

【中文标题】SQL Server 2012 查询混乱【英文标题】:SQL Server 2012 Query Confusion 【发布时间】:2015-01-31 03:32:46 【问题描述】:

我是 SQL 初学者,我似乎无法针对这个问题提出正确的查询:

使用相关子查询为每位客户返回一行,代表客户最早的订单(日期最早的订单)。每行应包括以下三列:EmailAddress、OrderID 和 OrderDate。

我首先加入订单和客户表。 EmailAddress 是客户表中唯一需要的列。

      SELECT EmailAddress, OrderDate, orderID
      FROM Customers c JOIN orders o
      ON c.CustomerID = o.CustomerID

【问题讨论】:

【参考方案1】:

一个不太复杂的答案:

SELECT  EmailAddress, OrderID, OrderDate AS OldestOrder
  FROM  Customers AS C
        JOIN Orders AS O1
            ON C.CustomerID = O1.CustomerID
 WHERE  O1.OrderDate =
            (SELECT MIN(OrderDate)
             FROM Orders AS O2
             WHERE C.CustomerID = O2.CustomerID)

【讨论】:

【参考方案2】:

使用ROW_NUMBER() 获取按OrderDate 降序订购的每个客户的唯一ID。最新日期为RNO=1。现在在外部查询中进行过滤。

SELECT EmailAddress, OrderDate, orderID
FROM
(
   SELECT ROW_NUMBER() OVER(PARTITION BY c.CustomerID ORDER BY OrderDate DESC)RNO,
   EmailAddress, OrderDate, orderID
   FROM Customers c JOIN orders o
   ON c.CustomerID = o.CustomerID
)TAB 
WHERE RNO=1

【讨论】:

【参考方案3】:

您仍然可以使用 HAVING 子句和 IN 运算符来针对这个特定问题获得相同的结果

代码:

SELECT DISTINCT EmailAddress, OrderID, OrderDate
FROM Customers
    JOIN orders
    ON Customers.CustomerID = Orders.CustomerID
GROUP BY EmailAddress, OrderID, OrderDate
HAVING OrderID IN (1,2,4,5,6,7,8)
ORDER BY EmailAddress ASC;

【讨论】:

以上是关于SQL Server 2012 查询混乱的主要内容,如果未能解决你的问题,请参考以下文章

使用 Visual Studio 2012 和 SQL Server Management Studio 2012 运行 SQL Server CE 4 查询

SQL Server 2012 查询 - 按 [重复] 分组

导入到sql server后,数据行顺序混乱

SQL Server 2012 从 SQL 查询创建用户

SQL Server 2012 使用 OPENROWSET 查询 Access 2007 数据错误

包含斜杠的 SQL Server 2012 查询字符串