mysql UPDATE 组的最大值使用同一组的 MIN(id) 的 `open` 值,多行

标签 mysql sql

我想更新组 (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/

相关文章:

mysql - 如何在多个列上选择 DISTINCT 并在 mysql 中选择其他列

mysql - 在MySQL中比较两个表的数据

php - 使用一列中的多个值规范化 MySQL 数据库

php - 两个相同的日期时间;一个显示 12 小时,另一个显示 24 小时

php - 什么是从 mysql 查询返回多行的 PHP 函数?

mysql - MySQL 中何时使用单引号、双引号和反引号

sql - 获取已排序的数据库记录子集的最佳方法

mysql - SQL从n组中获得均匀分布 - 获取随机项目

sql - 添加索引后查询性能下降

MySQL 查询组合来自多个表的总和