【问题标题】:mysql UPDATE MAX value of group using `open` value of MIN(id) of same group, multiple rowsmysql UPDATE MAX值组使用同一组的MIN(id)的`open`值,多行
【发布时间】:2018-08-02 11:04:59
【问题描述】:

我想使用同一组的 MIN(id) 行中的 last 值更新组 (exchange, base_currency, quote_currency, DATE(created_at)) 的 MAX(id) 的 open 值。

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 值来更新 open 值组的 MAX(id)。

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)

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    您可以在子查询中计算最小值/最大值。然后使用另一个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;
    

    【讨论】:

    • 哇,戈登,你真是个天才,我的大脑快要爆炸了。非常感谢您的帮助。
    猜你喜欢
    • 2010-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-10
    • 2020-03-05
    • 1970-01-01
    • 2012-02-06
    • 2017-08-07
    相关资源
    最近更新 更多