SQL相关查询混淆

时间:2015-01-19 20:11:36

标签: sql sql-server-2008

我正在使用AdventureWorks数据库进行练习,但我陷入了一些相关的查询逻辑。有人可以帮我这个吗? 以下查询会生成不同的数据。

第一个查询返回客户订单日期以及每个客户第一个订单日期的所有订单。

SELECT   t1.SalesOrderID,
         t1.CustomerID,
         (
            SELECT MIN(t2.OrderDate) 
            FROM Sales.SalesOrderHeader t2
            WHERE t2.CustomerID = t1.CustomerID
         ) AS orderdate
FROM Sales.SalesOrderHeader t1

第二个查询仅返回客户明确的第一个日期的第一个订单

USE AdventureWorks2008R2


GO

SELECT   t1.SalesOrderID,
         t1.CustomerID,
         t1.OrderDate
FROM Sales.SalesOrderHeader t1
WHERE t1.OrderDate =
(
      SELECT MIN(t2.OrderDate) 
      FROM   Sales.SalesOrderHeader t2 
      WHERE  t2.customerID = t1.customerID
)
ORDER BY t1.CustomerID

2 个答案:

答案 0 :(得分:0)

第一个查询从customerId返回orderId,customerId和第一个订单的日期 从所有订单 - 你每行得到3条信息。

第二个查询将结果限制为某个客户在此部分中下订单(可能是一个)的第一个日期的结果:

(select MIN(t2.OrderDate) from Sales.SalesOrderHeader t2 Where t2.customerID = t1.customerID)

答案 1 :(得分:0)

这两个查询的结果会有所不同.. 第一个查询将返回SalesOrderHeader的所有记录 考虑从t1选择SalesOrderId,CustomerId和OrderDate,从t2选择OrderDate。

现在,第一个查询将返回所有记录,而不管CustomerId是否为t1.OrderDate用于销售订单,但是t2将返回该客户的MinOrder日期。

1, C1, 2011, 2011
2, C1, 2012, 2011
3, C1, 2013, 2011

第二个查询将仅返回OrderDate最小的记录。

1, C1, 2011, 2011