【问题标题】:Query giving all the record need to generate latest record from history table查询所有需要从历史表中生成最新记录的记录
【发布时间】:2020-04-28 14:03:14
【问题描述】:

加入表时需要从历史表中获取最新记录。

当我在下面进行查询时

select * from Product, ProductHistory where Product.ProductNo=ProductNo.ProductNo

它提供了我需要的所有记录,即 ProductHistory 表中的最新记录

【问题讨论】:

  • JOINJOINJOIN.
  • 样本数据最好显示为formatted text。请参阅here,了解有关如何创建漂亮表格的一些提示。
  • @GordonLinoff 我正在加入,但同一产品的记录不止一条。我需要获取最新的历史记录
  • 提示:加入子查询以获取每个 ProductNo 的最大订单日期

标签: sql join inner-join


【解决方案1】:

未经测试

我会这样做:

从子查询开始获取每个产品的“最新”日期:

select ProductNo, max(Date)
from ProductHistory
group by ProductNo

然后你必须将该结果加入到 ProductHistory 表中以获得相应的“交易”:

select PH.ProductNo, PH.Transaction, PH.Date
from (
   select ProductNo, max(Date)
   from ProductHistory
   group by ProductNo
) MaxPH
inner join ProductHistory PH
   on PH.ProductNo = MaxPH.ProductNo
   and PH.Date = MaxPH.Date

最后加入Product表得到Product(名称)

select P.Product, P.ProductNo, PH.Transaction, PH.Date
from (
   select ProductNo, max(Date)
   from ProductHistory
   group by ProductNo
) MaxPH
inner join ProductHistory PH
   on PH.ProductNo = MaxPH.ProductNo
   and PH.Date = MaxPH.Date
inner join Product P on P.ProductNo = PH.ProductNo

您还可以使用带有分区的行号来查找“最新”。

【讨论】:

  • 通过添加子查询,它的表现非常糟糕,还有其他方法吗?谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-07
  • 1970-01-01
  • 1970-01-01
  • 2013-02-13
  • 1970-01-01
  • 2021-11-11
  • 1970-01-01
相关资源
最近更新 更多