在customer表中存在多个客户的历史记录行,并且已分配了一个ID,该ID可能已随时间发生更改
| 名称|ID|日期|
| --|--|--|
| Abhishek| 1 |2023年8月23日|
| Abhishek| 1 |2023年3月8日|
| Abhishek| 2 |2019 -06- 27 2019 -06- 27 2019 -06 - 27|
| Abhishek| 3 |2019 - 09-10 00:00:00|
| Seema|一|2023 -08- 21|
| Seema| B| 2019 -06- 22|
| Seema| C| 2020 -05- 22|
数据中的最新ID
| 名称|ID|日期|- -|
| --|--|--|--|
| Abhishek| 1 |2023年8月23日||
| Seema|一|2023 -08- 21||
所需的输出(在这些最新的ID值之前分配的ID值)是
| 名称|ID|日期|- -|
| --|--|--|--|
| Abhishek| 2 |2019 -06- 27 2019 -06- 27 2019 -06 - 27||
| Seema| B| 2019 -06- 22||
我尝试了滞后函数,但在响应中,ID中有多个更改,所需的输出不是第二个最新的ID,而是涉及不同的ID
例如:
select * from (
select Name,`id,lag(id,1) over (partition by Name order by date) as
lag_id from customer_history)
| 名称|ID|滞后ID|
| --|--|--|
| Abhishek| 1 | 2 |
| Abhishek| 2 | 3 |
| Seema|一|B|
2条答案
按热度按时间3pvhb19x1#
如果这是MySQL,那么日期的格式应该是YYYY-mm-dd。
以下查询使用GROUP BY删除重复的ID和ROW_NUMBER():
输出量:
| 名称|ID| MAX(日期)|RN|
| --|--|--|--|
| Abhishek| 2 |2023-06-17| 2 |
| Seema| B| 2022-06-07 2022-06-07| 2 |
这里有一个db<>fiddle
x6492ojm2#
如果你的日期确实是这样格式化的,那么你需要添加一个
STR_TO_DATE()
函数来重新格式化日期,然后才能运行前面建议的答案。因此:https://dbfiddle.uk/VdWN5TNq