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