Sql server 如何在查询中仅从3个联接表返回最新结果
我有三个名为Contracts、Bills和Companys的表,我在一个名为“ContractID”的值上内部联接了这些表,该值链接了所有三个表。我有一个查询工作良好,但我只希望最新的结果被拉。Contractd字段可以从具有不同日期的合同表返回多个结果,因此DISTINCT无法缩小其范围 当前查询如下:Sql server 如何在查询中仅从3个联接表返回最新结果,sql-server,sql-server-2005,inner-join,Sql Server,Sql Server 2005,Inner Join,我有三个名为Contracts、Bills和Companys的表,我在一个名为“ContractID”的值上内部联接了这些表,该值链接了所有三个表。我有一个查询工作良好,但我只希望最新的结果被拉。Contractd字段可以从具有不同日期的合同表返回多个结果,因此DISTINCT无法缩小其范围 当前查询如下: SELECT cn.ContractID , cn.Vendor , cn.ContractDate , b.ContractID , b.TotalBill
SELECT cn.ContractID
, cn.Vendor
, cn.ContractDate
, b.ContractID
, b.TotalBill
, b.CurrentDue
, cm.ContractID
, cm.CompanyID
, cm.[Description]
FROM [Contract] cn
INNER JOIN Company cm
ON cn.ContractID = cm.ContractID
INNER JOIN Bill b
ON cn.ContractID = b.ContractID
我正在使用MSSQLServer2005。有人能帮我调整查询,使其只返回每个收缩的最新ContractDate结果吗?如果您的查询按您希望的方式排序,您只需将select Top 1添加到查询中,这将为您提供第一行:
SELECT Top 1 cn.ContractID , cn.Vendor , cn.ContractDate , b.ContractID
, b.TotalBill, b.CurrentDue, cm.ContractID, cm.CompanyID, cm.[Description]
FROM [Contract] cn
INNER JOIN Company cm ON cn.ContractID = cm.ContractID
INNER JOIN Bill b ON cn.ContractID = b.ContractID
order by cn.ContractDate DESC
如果您的查询按您希望的方式排序,只需将select Top 1添加到您的查询中,即可得到第一行:
SELECT Top 1 cn.ContractID , cn.Vendor , cn.ContractDate , b.ContractID
, b.TotalBill, b.CurrentDue, cm.ContractID, cm.CompanyID, cm.[Description]
FROM [Contract] cn
INNER JOIN Company cm ON cn.ContractID = cm.ContractID
INNER JOIN Bill b ON cn.ContractID = b.ContractID
order by cn.ContractDate DESC
用于为每个收缩的对象指定一个等级,然后仅选择等级为1的对象。例:
SELECT *
FROM
(
SELECT
Contract.ContractID,
Contract.Vendor,
Contract.ContractDate,
Bill.ContractID,
Bill.TotalBill,
Bill.CurrentDue,
Company.ContractID,
Company.CompanyID,
Company.Description,
RANK() OVER (ORDER BY ContractDate DESC) as RecordRank
FROM Contract
INNER JOIN Company
ON Contract.ContractID = Bill.ContractID
INNER JOIN Bill
on Company.ContractID = Bill.ContractID
) qry
WHERE RecordRank = 1
用于为每个收缩的对象指定一个等级,然后仅选择等级为1的对象。例:
SELECT *
FROM
(
SELECT
Contract.ContractID,
Contract.Vendor,
Contract.ContractDate,
Bill.ContractID,
Bill.TotalBill,
Bill.CurrentDue,
Company.ContractID,
Company.CompanyID,
Company.Description,
RANK() OVER (ORDER BY ContractDate DESC) as RecordRank
FROM Contract
INNER JOIN Company
ON Contract.ContractID = Bill.ContractID
INNER JOIN Bill
on Company.ContractID = Bill.ContractID
) qry
WHERE RecordRank = 1
您的意思是类似于
ORDER BY Contract.ContractDate DESC LIMIT 1
?编辑问题以使用别名和更好的格式。您的意思是类似于ORDER BY Contract.ContractDate DESC LIMIT 1
?编辑问题以使用别名和更好的格式。选择前1个cn.Contract,cn.Vendor,cn.ContractDate,b.contracted,b.TotalBill,b.CurrentDue,cm.contracted,cm.CompanyID,cm。[说明]来自[合同]中国内部加入公司cm ON cn.contracted=cm.contracted内部加入票据b ON cn.contracted=b.contracted订单by cn.contracted日期描述您可以编辑您的问题;没有必要在评论中发布额外内容。Joe,不幸的是,我不想只返回一份合同,我想从每份合同中选择最新的一行。从[contract]中选择排名前1的cn.ContractID、cn.Vendor、cn.ContractDate、b.ContractID、b.TotalBill、b.CurrentDue、cm.ContractID、cm.CompanyID、cm。[说明]来自[contract]cn内部加入公司cm ON cn.constractd=cm.constractd内部加入账单b ON cn.constractd=b.constractd订单由cn.ContractDate desc您可以编辑您的问题;没有必要在评论中发布额外内容。Joe,不幸的是,我不想只返回一份合同,我想要每个合同中最新的一行。