2015-07-21 87 views
0

如何使用旧条目中的数据更新表中某些字段?使用mysql中最旧行的数据更新最新一行

示例表:

id | timestamp | columne1| columne2 
    --------------------------------------- 
    1 | 2015-07-20...| 078888 | ***** 
    2 | 2015-07-19...| 155896 | value 2.2 
    3 | 2015-07-07...| 278831 | value 2.3 
    4 | 2015-07-01...| 078888 | value 2.4 

我试图在同一columne2行的值更新从行1 columne2 4.

+0

你给了我们和您的查询的模式是完全不同的。你可以在你的问题中更新一个或另一个吗? –

+0

我不确定我的查询是否正确,因此我删除了它。 Principe实际上与架构中解释的相同。 –

+0

那么,你只是想要在你运行插入查询时总是插入最老的数据(基于'timestamp'列)'columne2'? –

回答

2

计划

  • 选择最小条目(最大)由columne1分组,
  • 选择由columne1分组的最大条目数(分钟),
  • 从分钟数据加入呼叫MAXS到分钟
  • 组calls.columne2值

查询

update 
calls c 
inner join 
(
    select c1.*, q1.min_ts, q1.max_ts 
    from calls c1 
    inner join 
    (select columne1, min(`timestamp`) min_ts, max(`timestamp`) as max_ts from calls group by columne1) q1 
    on c1.columne1 = q1.columne1 
    where c1.`timestamp` = q1.max_ts 
) maxs 
on c.id = maxs.id 
inner join 
(
    select c1.*, q1.min_ts, q1.max_ts 
    from calls c1 
    inner join 
    (select columne1, min(`timestamp`) min_ts, max(`timestamp`) as max_ts from calls group by columne1) q1 
    on c1.columne1 = q1.columne1 
    where c1.`timestamp` = q1.min_ts 
) mins 
on maxs.columne1 = mins.columne1 
set c.columne2 = mins.columne2 
; 

输出

+----+------------------+----------+-----------+ 
| id | timestamp  | columne1 | columne2 | 
+----+------------------+----------+-----------+ 
| 1 | 2015-07-20 12:00 | 078888 | value 2.4 | 
| 2 | 2015-07-19 12:00 | 155896 | value 2.2 | 
| 3 | 2015-07-07 12:00 | 278831 | value 2.3 | 
| 4 | 2015-07-01 12:00 | 078888 | value 2.4 | 
+----+------------------+----------+-----------+ 

sqlfiddle