UPDATE + SET + WHERE - 动态最小值
UPDATE + SET + WHERE - Dynamic minimum value
这是对以下内容的跟进:
我确实有通过 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") 值添加到 table 中的新列(而不是让通过 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
但是我在构建正确的查询时遇到了困难。
正确的做法是什么?我确实认识到这是一个很难解决的问题。
您的 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 中,我对 table 和列使用了不同的名称。我不想使用 SQL 关键字作为名称
这是对以下内容的跟进:
我确实有通过 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") 值添加到 table 中的新列(而不是让通过 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
但是我在构建正确的查询时遇到了困难。 正确的做法是什么?我确实认识到这是一个很难解决的问题。
您的 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 中,我对 table 和列使用了不同的名称。我不想使用 SQL 关键字作为名称