gpt4 book ai didi

sql - T-SQL 子查询最大(日期)和连接

转载 作者:行者123 更新时间:2023-12-01 20:19:12 26 4
gpt4 key购买 nike

我正在尝试连接多个表,但其中一个表具有不同日期的partid 的多条记录。我想获取最近日期的记录。

以下是一些示例表格:

Table: MyParts
Partid Partnumber Description
1 ABC-123 Pipe
2 ABC-124 Handle
3 ABC-125 Light


Table: MyPrices
Partid Price PriceDate
1 $1 1/1/2005
1 $2 1/1/2007
1 $3 1/1/2009
2 $2 1/1/2005
2 $4 1/1/2006
2 $5 1/1/2008
3 $10 1/1/2008
3 $12 1/1/2009

如果我只是想找到某个零件的最新价格,我可以这样做:

SELECT * FROM MyPrice WHERE PriceDate = (SELECT MAX(PriceDate) 
FROM MyPrice WHERE Partid = 1)

但是我想先进行连接并获取所有零件的正确价格,而不仅仅是一个零件。这是我尝试过的:

SELECT * FROM MyParts LEFT JOIN MyPrice ON MyParts.Partid = MyPrice.Partid WHERE 
MyPart.PriceDate = (SELECT MAX(PriceDate) FROM MyPrice)

结果是错误的,因为它采用了整个表的最高价格日期。

SELECT * FROM MyParts LEFT JOIN MyPrice ON MyParts.Partid = MyPrice.Partid WHERE 
MyPart.PriceDate = (SELECT MAX(PriceDate) FROM MyPrice WHERE MyPrice.Partid =
MyParts.Partid)

出现错误。

我该怎么做才能得到我想要的结果。

最佳答案

这是另一种无需子查询的方法。此方法通常会优于其他方法,因此值得测试这两种方法,看看哪种方法性能最佳。

SELECT
PRT.PartID,
PRT.PartNumber,
PRT.Description,
PRC1.Price,
PRC1.PriceDate
FROM
MyParts PRT
LEFT OUTER JOIN MyPrices PRC1 ON
PRC1.PartID = PRT.PartID
LEFT OUTER JOIN MyPrices PRC2 ON
PRC2.PartID = PRC1.PartID AND
PRC2.PriceDate > PRC1.PriceDate
WHERE
PRC2.PartID IS NULL

如果您有两个具有相同 EXACT PriceDate 的价格,这将给出多个结果(大多数其他解决方案也会执行相同的操作)。另外,我没有什么可以解释最后的价格日期是在未来的。无论您最终使用哪种方法,您都可能需要考虑对此进行检查。

关于sql - T-SQL 子查询最大(日期)和连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/879111/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com