我有类似下面的场景

注册促销代码

注册促销代码(如果适用)是成员用来创建其成员资格的代码. 我们的系统目前为成员每次进行更改(例如升级/降级他们的计划)创建一条新行. 促销代码目前没有继续,我们希望确保我们捕捉到这一点,以适当地分析会员获得.

例如: Members_id:1

Membership_id:1首次登录,促销代码:New10

第二次升级到更高版本而不使用促销代码

第三,在没有促销代码的情况下升级到另一个更高版本

所以我们在数据库的第一行有3行,我们有促销码:New10,但另外2行没有促销码.

根据下面的示例,成员ID为1的最新记录创建于2022-09-25,我想 Select 促销代码为New10的最新记录.你能建议一下MySQL的逻辑吗?

例如

Id        Membership_id     promocode createdtime             
1               1            New10    2022-08-01
2               1                     2022-09-14
3               1                     2022-09-25

在这里,我希望 for each 成员ID Select 最新记录,但希望在创建时从第一条记录中 Select 代码列,如下所示

预期输出:

ID  Membership_id   promocode   createdtime
3       1   new10   25-09-2022

推荐答案

这是一个简单的解决方案.

select   max(id)          as id
        ,Membership_id   
        ,max(promocode)   as promocode
        ,max(createdtime) as createdtime
from     t
group by Membership_id
id Membership_id promocode createdtime
3 1 New10 2022-09-25

这是一个解决方案,可以在客户获得多个客户的情况下为您提供前promocode个.

select   id
        ,Membership_id       
        ,first_promocode as promocode
        ,createdtime
from     (
         select  *
                ,max(case when grp = 1 then promocode end) over(partition by Membership_id order by createdtime) as first_promocode
         from    (
                 select  *
                         ,count(case when promocode is not null then 1 end) over(partition by Membership_id order by createdtime) as grp
                         ,rank() over(partition by Membership_id order by createdtime desc) as rnk
                  from    t
                 ) t
         ) t
where    rnk = 1

Fiddle

Mysql相关问答推荐

无法连接到扩展坞MySQL Unix套接字

MySQL中如何对字符串进行算术运算?

布尔值之间的 SQL less/greater 比较会产生意外结果

在 mySQL 中计算每日数组的每周指标

从连接表中try 按唯一ID计算行数 MySQL

如何根据购买的商品数量查找 unique_ids 的数量

排序子查询结果并返回每个 ID 的第一行

SQL查询以查找两个特定行的总和

为什么这个查询需要超过 5 秒才能运行?

MySQL:从 n 个关系表中 Select 所有具有 MAX() 值的行

Golang Gorm:相同的查询构造不同,抛出不同的结果

MySQL按连续值和计数分组

如何使用 laravel 连接 mysql?

从一个带有连接的表中删除

不正确的整数(2147483647)被插入到 MySQL 中?

MySQL嵌套 Select 查询?

Drupal 的默认密码加密方法是什么?

PHP MySQLI 防止 SQL 注入

如何改进 INSERT INTO ... SELECT 锁定行为

在 MySQL 中存储 IPv6 地址