Как узнать измененное имя в таблице по date_key

У меня есть таблица с 3 значением


Date_key    | user_name  | user_id
2022-07-12  | milkcotton | 1
2022-09-12  | cereal     | 2
2022-06-12  | musicbox1  | 3
2022-12-31  | harrybel1  | 1
2022-12-25  | milkcotton1| 4
2023-01-01  | cereal     | 2

Я хочу знать пользователя, который изменил user_name в 1 семестре (01 июля 2022 г. - 31 декабря 2022 г.). Я могу сделать это? мое ожидаемое значение:

previous_name| new_name  | user_id
milkcotton  | harrybel1 | 1


Спасибо!

Узнать изменение имени пользователя из 1 таблицы

Руководство для начинающих по веб-разработке на React.js
Руководство для начинающих по веб-разработке на React.js
Веб-разработка - это захватывающая и постоянно меняющаяся область, которая постоянно развивается благодаря новым технологиям и тенденциям. Одним из...
Разница между Angular и React
Разница между Angular и React
React и AngularJS - это два самых популярных фреймворка для веб-разработки. Оба фреймворка имеют свои уникальные особенности и преимущества, которые...
Инструменты для веб-скрапинга с открытым исходным кодом: Python Developer Toolkit
Инструменты для веб-скрапинга с открытым исходным кодом: Python Developer Toolkit
Веб-скрейпинг, как мы все знаем, это дисциплина, которая развивается с течением времени. Появляются все более сложные средства борьбы с ботами, а...
Калькулятор CGPA 12 для семестра
Калькулятор CGPA 12 для семестра
Чтобы запустить этот код и рассчитать CGPA, необходимо сохранить код как HTML-файл, а затем открыть его в веб-браузере. Для этого выполните следующие...
ONLBest Online HTML CSS JAVASCRIPT Training In INDIA 2023
ONLBest Online HTML CSS JAVASCRIPT Training In INDIA 2023
О тренинге HTML JavaScript :HTML (язык гипертекстовой разметки) и CSS (каскадные таблицы стилей) - две основные технологии для создания веб-страниц....
Как собрать/развернуть часть вашего приложения Angular
Как собрать/развернуть часть вашего приложения Angular
Вам когда-нибудь требовалось собрать/развернуть только часть вашего приложения Angular или, возможно, скрыть некоторые маршруты в определенных средах?
1
0
56
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Примечание. Это делается в Postgres SQL. Это должно быть похоже на большинство движков SQL. Функции даты могут немного отличаться в других механизмах SQL.

Попробуй это:

with BaseTbl as(
 select *,
  cast(to_char(Date_key, 'YYYYMM') as int) as year_month,
  cast(to_char(Date_key, 'MM') as int) as month,
  row_number() over(partition by user_id order by date_key desc) as rnk
 from Table1
   ),
   LatestTwoChanges as(
  select * 
  from BaseTbl
  where user_id in (select user_id from BaseTbl where rnk=2 ) 
  and rnk <=2
   )
  select 
  t2.user_name as previous_name,
  t1.user_name as new_name,
  t1.user_id
  from LatestTwoChanges t1
  join LatestTwoChanges t2
  on t1.user_id=t2.user_id
  where t1.rnk=1
  and t2.rnk=2
  and t1.year_month-t2.year_month <6
  and t1.user_name <> t2.user_name
  and (t1.month + t2.month <= 12 or  t1.month + t2.month >=14 )
  -- this is to check whether the date falling in the same semester. 

Демонстрация скрипта SQL Здесь

Здесь таблица t1 содержит последние изменения, а таблица t2 содержит предыдущие изменения для user_id. Последнее условие фильтра

and (t1.month + t2.month <= 12 or  t1.month + t2.month >=14 )

Заключается в том, чтобы убедиться, что эти две даты приходятся на один и тот же семестр или нет. что означает, что два месяца должны быть либо между 1 и 6, либо между 7 и 12.

Другие вопросы по теме