如何识别当前值之前被赋值的值?

问题描述 投票:0回答:2

客户表中的客户存在多个历史行,并且已分配一个 ID,该 ID 可能已随时间而更改

姓名 身份证 日期
阿布舍克 1 2023年8月23日
阿布舍克 1 2023年3月8日
阿布舍克 2 2023年6月17日
阿布舍克 3 2022年9月10日
西玛 A 2023年8月21日
西玛 B 2022年7月6日
西玛 C 2020年5月22日

数据中最新的id

姓名 身份证 日期 **
阿布舍克 1 2023年8月23日
西玛 A 2023年8月21日

所需的输出(在这些最新的 ID 值之前分配的 ID 值)是

姓名 身份证 日期 **
阿布舍克 2 2023年6月17日
西玛 B 2022年7月6日

我尝试了滞后函数,但在 id 中有多个更改的响应中,所需的输出不是第二个最新的 id,而是涉及不同的 id

例如:

select * from (
select Name,`id,lag(id,1) over (partition by Name order by date) as
lag_id from customer_history)
姓名 身份证 lag_id
阿布舍克 1 2
阿布舍克 2 3
西玛 A B
sql mysql function hive sql-function
2个回答
0
投票

如果这是 MySQL,则日期格式应为 YYYY-mm-dd。

以下查询使用 GROUP BY 删除重复的 ID 和 ROW_NUMBER():

WITH t1 AS (
    SELECT Name, ID, MAX(Date), ROW_NUMBER() OVER (PARTITION BY Name ORDER BY MAX(Date) DESC) AS rn
    FROM customer_history
    GROUP BY Name, ID
)
SELECT * FROM t1 WHERE rn = 2;

输出:

姓名 身份证 最大(日期) rn
阿布舍克 2 2023-06-17 2
西玛 B 2022-06-07 2

0
投票
select *
from (        
        select *,row_number() over (partition by name order by date desc) as rn
          from (
                  select name,id,max(date) as date 
                  from TABLENAME q
                  group by name, id ) x ) z
where z.rn = 2
© www.soinside.com 2019 - 2024. All rights reserved.