【问题标题】:UPDATE + SET + WHERE - Dynamic minimum valueUPDATE + SET + WHERE - 动态最小值
【发布时间】:2015-02-04 04:35:42
【问题描述】:

这是对以下内容的跟进: Dynamic minimum value for specfic range (mysql)

我确实有通过 SELECT 命令获取第三列(过去 3 天的最低值)“Low_3_days”的查询:

-----------------------------------------
| Date         | Unit_ | Lowest_in_last_|
|              | price |  3_days        | 
|----------------------------------------
| 2015-01-01   | 15    |      15        | 
| 2015-01-02   | 17    |      15        | 
| 2015-01-03   | 21    |      15        | 
| 2015-01-04   | 18    |      17        | 
| 2015-01-05   | 12    |      12        | 
| 2015-01-06   | 14    |      12        |
| 2015-01-07   | 16    |      12        | 
|----------------------------------------

select S.Date,Unit_price, 
    (select S.Date, Unit_price, 
        (SELECT min(s2.Unit_Price) 
         FROM table s2
         WHERE s2.DATE BETWEEN s.DATE - interval 3 day and
                              s.DATE - interval 1 day
        ) as min_price_3_days
FROM table S;

我的新挑战是 - 使用 UPDATE-SET-WHERE 的最佳方法是什么,以便我可以将 ("Lowest_in_last_3_days") 值添加到表中的新列(而不是通过 SELECT 向我显示临时结果) .

按照 UPDATE-SET-WHERE 语法,查询将是:

UPDATE table 
    SET min_price_3_days = 
         (select S.Date, Unit_price, 
       (SELECT min(s2.Unit_Price) 
        FROM table s2
        WHERE s2.DATE BETWEEN s.DATE - interval 3 day and
                              s.DATE - interval 1 day
       ) as min_price_3_days

但我很难构建正确的查询。 正确的方法是什么?我确实认识到这是一个很难解决的问题。

【问题讨论】:

  • 还有一个通知。如果你想要想要的结果,你应该使用BETWEEN s.DATE - interval 2 day and s.DATE - interval 0 day
  • 确实,谢谢你的正确指点!!

标签: mysql sql sql-update


【解决方案1】:

您的UPDATE 应如下所示:

update table set low_3_days=
    (SELECT min(Unit_Price) 
     FROM (select unit_price, date as date2 from table) as s2
     WHERE s2.date2 BETWEEN date - interval 3 day and date - interval 1 day     
); 

您可以在SQLFiddle查看它

在 Fiddle 中,我为表和列使用了不同的名称。我不喜欢使用 SQL 关键字作为名称

【讨论】:

  • 非常感谢您的快速周转!出于某种原因,我收到 Low_3_days 列的 NULL 响应。有什么我做错了吗?
  • 我确实注意到很多人对此主题感兴趣和观点,如果还有其他人有其他建议并愿意提供帮助,请随时加入。我完全意识到这很难解决。谢谢!
  • 简直太棒了!这很完美。感谢您花费额外的时间和精力来解决这个问题。我向你致敬,Rtruszk!
猜你喜欢
  • 2017-06-20
  • 1970-01-01
  • 2020-05-23
  • 2017-12-24
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多