Sql 要返回的查询

Sql 要返回的查询,sql,sql-server,Sql,Sql Server,我需要编写一个查询,该查询将返回符合以下条件的结果。。对于三个表,客户、产品和订单历史记录,我想为每个客户查找每个产品的最新订单。非常感谢您的帮助。为每位客户提供每种产品的最新订单-您可以通过使用行号()窗口函数来实现这一点,并根据每个标准对数据进行分区 因此,请尝试类似的方法(只是猜测表名和列名,因为您还没有提供任何相关信息): 好的,解释时间: CTE(公共表表达式)基本上连接了三个表(猜测表和列名是什么,以及它们是如何连接的),并从这些表中选择一些列(当然,如果需要,您可以添加更多列!)

我需要编写一个查询,该查询将返回符合以下条件的结果。。对于三个表,客户、产品和订单历史记录,我想为每个客户查找每个产品的最新订单。非常感谢您的帮助。

为每位客户提供每种产品的最新订单-您可以通过使用
行号()窗口函数来实现这一点,并根据每个标准对数据进行分区

因此,请尝试类似的方法(只是猜测表名和列名,因为您还没有提供任何相关信息):

好的,解释时间:

  • CTE(公共表表达式)基本上连接了三个表(猜测表和列名是什么,以及它们是如何连接的),并从这些表中选择一些列(当然,如果需要,您可以添加更多列!)

  • 对于数据的每个“分区”
    RowNum
    是一个连续的数字,从1开始;
    PARTITION BY
    子句表示,对于
    (CustomerID,ProductID)
    的每个组合,您希望有一个“PARTITION”,它根据
    ORDER BY
    子句编号(1,2,3,4,…)-这里,它为该分区(该客户+产品)的最新订单获取编号
    1

因此,最后,您需要做的就是从该CTE中选择,并仅选择那些具有
RowNum=1
的行-这些是订单历史表中
(CustomerID,ProductID)
的每个“分区”的最新订单


这适用于SQL Server2005和更新版本-2000年不支持此功能。…

请发布表结构(您有哪些列和哪些数据类型),如果可能,请发布每个表的一些示例数据以及预期输出。它也有助于指定这是什么具体的数据库。。。。添加一个相关标签:
mysql
postgresql
oracle
db2
sqlserver
-它们都使用sql作为查询语言-但它们之间存在差异hi,抱歉,缺少详细信息,我对sql还是相当陌生的。这是SQL Server。表客户:Cust Id,FirstName,姓氏name,公司产品:ProductId,ProductName,Cost OrderHistory:OrderID,CustID,ProductId,OrderDate…我们仍然需要表架构,否则我们无法真正帮助您。Marc_,非常感谢您的帮助,特别是我能够提供这么小的细节,我会在周一的工作中试试,让你知道我的进展如何。问候戴斯。
;WITH NewestData AS
(
    SELECT
        oh.OrderDate,
        c.CustomerName, 
        p.ProductName,
        RowNum = ROW_NUMBER() OVER (PARTITION BY oh.CustomerID, oh.ProductID
                                    ORDER BY oh.OrderDate DESC)
    FROM
        dbo.OrderHistory oh
    INNER JOIN
        dbo.Customer c ON oh.CustomerID = c.CustomerID
    INNER JOIN
        dbo.Product p ON oh.ProductID = p.ProductID
)
SELECT
   OrderDate, CustomerName, ProductName
FROM       
   NewestData
WHERE
   RowNum = 1