我想更新组 (exchange, base_currency, quote_currency, DATE(created_at)
) 的 MAX(id) 的 open
值,使用该值来自同一组的 MIN(id) 行的 last
。
id last open exchange base_curr quote_curr created_at
6 1.11 0.00 ex1 usd yen 2018-07-29 03:00:00 --> update open with 1.14 (value of last from MIN(id) of group)
5 1.09 0.00 ex1 usd yen 2018-07-29 02:00:00
4 1.14 0.00 ex1 usd yen 2018-07-29 01:00:00
3 0.49 0.00 ex2 yen won 2018-07-29 03:00:00 --> update open with 0.50 (value of last from MIN(id) of group)
2 0.51 0.00 ex2 yen won 2018-07-29 02:00:00
1 0.50 0.00 ex2 yen won 2018-07-29 01:00:00
我了解如何获取组的所有 MIN(id),但不确定如何使用 MIN(id) 行的 last
值进行更新组的 MAX(id) 的 open
值。
MAX(id) 或 MAX(created_at) 会为我提供组的最新行。
SELECT MIN(id) as min_id, last
FROM tickers
WHERE DATE(created_at) = '2018-07-29'
GROUP BY exchange, base_currency, quote_currency, DATE(created_at)
最佳答案
您可以在子查询中计算最小值/最大值。然后使用另一个 join
从最小行中引入值:
update tickers t join
(select exchange, base_curr, quote_curr, date(created_at) as created_at_date,
max(id) as maxid, min(id) as minid
from tickers t2
group by exchange, base_curr, quote_curr, date(created_at)
) tt
on tt.maxid = t.id join
tickers tmin
on tmin.id = tt.minid
set t.open = tmin.last;
关于mysql UPDATE 组的最大值使用同一组的 MIN(id) 的 `open` 值,多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51652060/