【问题标题】:SQL Join 2 tables with "ON" on max value in second tableSQL Join 2 个表,第二个表中的最大值为“ON”
【发布时间】:2016-08-22 05:07:22
【问题描述】:

我有两张桌子,一张是库存,另一张是不同日期的价格表。我需要用表 2 中可能不可用的特定日期的价格更新表 1,因此我需要回顾最后可用的价格。我怎样才能做到这一点。以下是我的表格:

Table1
SrNo Commodity Date         Price
1     Car      20-Aug-2015  <115>
2     Cycle    20-Aug-2015  <78>

Table2
SrNo Commodity Price Date
1     Car       100  1-Jan-2015
2     Car       120  1-Jun-2015
3     Car       115  20-Aug-2015
4     Cycle     80   10-May-2015
5     Cycle     78   10-Jun-2015

我尝试使用内部联接,但我可以为 Car 获取它,因为它在 2015 年 8 月 20 日有一个条目。我希望循环显示为 78,因为它是最后一个可用价格。

有人可以建议我如何做到这一点。

谢谢, 斯瓦蒂

【问题讨论】:

  • 这是哪个 RDBMS?

标签: mysql sql .net


【解决方案1】:

下一个代码将在 T-SQL 上运行 - 试试吧

update t1 set
  t1.Price = t2.Price 
from Table1 as t1
outer apply (
  select top 1 
    t2.Price 
  from Table2 as t2
  where t2.SrNo = t1.SrNo
  order by t2.Date desc
) t2

【讨论】:

    【解决方案2】:

    试试这个:

    UPDATE      a
    SET         a.Price = b.Price
    FROM        Table1 a
    INNER JOIN  Table2 b ON a.Commodity = b.Commodity
    WHERE       b.[Date] = (SELECT      MAX([Date])
                            FROM        Table2 c
                            WHERE       b.Commodity = c.Commodity
                            AND         c.[Date] <= a.[Date]
                            GROUP BY    c.Commodity)
    

    【讨论】:

      【解决方案3】:

      对于MySql

      UPDATE Table1 
      JOIN ( SELECT Commodity,Price
             FROM Table2 JOIN (SELECT Table2.Commodity,MAX(DATE) As LastDate
                        FROM Table2 
                        GROUP BY Commodity ) AS Tmp1
                  ON Table2.Date = Tmp1.LastDate
      
      ) AS Tmp2
      ON Tmp2.Commodity = Table1.Commodity
      SET Table1 .Price = Tmp2.Price
      

      MAX(DATE)在内部查询Tmp1中计算得到商品的最后可用价格

      SQLFiddle Demo

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-21
        • 1970-01-01
        相关资源
        最近更新 更多