mysql 分组大于1_mysql – 如何使用’大于’和’分组’创建连接?

我有一个包含一系列名称,事件和日期的表格.我创建了一个与特定事件(evt5)相关的新字段’evt5_date’.

每个名称可以有多个事件,每个事件的时间记录在evt_date字段中.

两个事件evt1和evt2与evt5有关.

我想在evt5之前的所有evt1和evt2行中插入第一次出现evt5的日期.如果在evt1或evt2之后没有evt5那么该字段留空.

所有这一切都必须为每个名字完成.有几千个不同的名字.我只在下面的数据中显示2

当前表数据 – evt5_date中没有值

name evt_date event evt5_date

name-1 2010-06-30 evt1

name-1 2009-10-30 evt5

name-1 2009-09-30 evt2

name-1 2009-06-30 evt5

name-1 2009-03-30 evt5

name-1 2009-02-28 evt2

name-1 2009-01-30 evt1

name-2 2005-05-30 evt2

name-2 2005-03-30 evt5

name-2 2005-01-30 evt1

我希望它看起来如何 – evt5_date字段中的值

name evt_date event evt5_date

name-1 2010-06-30 evt1

name-1 2009-10-30 evt5

name-1 2009-09-30 evt2 2009-10-30

name-1 2009-06-30 evt5

name-1 2009-03-30 evt5

name-1 2009-02-28 evt2 2009-03-30

name-1 2009-01-30 evt1 2009-03-30

name-2 2005-05-30 evt2

name-2 2005-03-30 evt5

name-2 2005-01-30 evt1 2005-03-31

我尝试使用下面的代码执行更新,但我不知道如何指定evt5的日期大于evt1和evt2的evt_date之间的链接,同时还通过evt5分组以获得与之相关的evt_date最近的evt5.

我还需要按名称分组,因为事件特定于每个名称.

update mytable as t1

set t1.evt5_date = (select min(t2.evt_date) from mytable as t2

where t2.event = 'evt5' AND

t2.evt_date > t1.evt_date

group by name)

where

t1.event in ('evt1','evt2')

任何建议将不胜感激.谢谢

更新最终解决方案 – @biziclop提供的一些小答案,以维护名称的完整性

UPDATE mytable AS t1

INNER JOIN

(

SELECT

a.name,a.evt_date,MIN( b.evt_date ) AS nearest_date

FROM mytable AS a

INNER JOIN mytable AS b ON b.event = 'evt5'

AND b.evt_date > a.evt_date

AND a.name = b.name -- needed this additional condition

GROUP BY a.name,a.evt_date -- added 'a.name' to 'group by'

) AS nearest_dates

ON nearest_dates.evt_date = t1.evt_date AND

nearest_dates.name = t1.name -- added this additional condition

SET t1.evt5_date = nearest_dates.nearest_date

WHERE t1.event IN ('evt1','evt2');

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值