Cómo obtener el más reciente de los datos repetidos en sql


Prefacio

Cuando la base de datos tiene datos duplicados, a veces necesitamos recuperar el más reciente para cumplir con el escenario empresarial. A continuación se describe cómo lograr a través de sql.

1. Preparación de datos

1. Estructura de la mesa

CREATE TABLE `t_iov_help_feedback` (
  `ID` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `USER_ID` int(11) DEFAULT NULL COMMENT '用户ID',
  `problems` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '问题描述',
  `last_updated_date` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '最后更新时间',
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

2. Datos de la tabla

INSERT INTO `t_iov_help_feedback`(`ID`, `USER_ID`, `problems`, `last_updated_date`) VALUES (1, 1, '时间比较小', '2021-02-23 10:11:49');
INSERT INTO `t_iov_help_feedback`(`ID`, `USER_ID`, `problems`, `last_updated_date`) VALUES (2, 2, '时间小', '2021-02-23 10:12:49');
INSERT INTO `t_iov_help_feedback`(`ID`, `USER_ID`, `problems`, `last_updated_date`) VALUES (3, 3, '我乱写的', '2021-02-23 11:19:19');
INSERT INTO `t_iov_help_feedback`(`ID`, `USER_ID`, `problems`, `last_updated_date`) VALUES (4, 1, '时间比较大', '2021-02-23 11:16:01');
INSERT INTO `t_iov_help_feedback`(`ID`, `USER_ID`, `problems`, `last_updated_date`) VALUES (5, 2, '时间大', '2021-02-23 11:19:13');

Inserte la descripción de la imagen aquí
Puede verse, USER_ID 1 y 2 tienen datos duplicados.

El registro con el tiempo más largo con USER_ID de 1 es 2021-02-23 11:16:01, y el registro con el tiempo más largo con USER_ID de 2 es 2021-02-23 11:19:13.

Esperamos encontrar los dos registros con más tiempo.

En segundo lugar, el método de realización

1.Plantilla SQL

SELECT
	t1.重复列,
	t1.时间列,
	t1.其余列 
FROM
	表 t1
	INNER JOIN ( SELECT t2.重复列, max( t2.时间列 ) AS 时间列 FROM 表 t2 GROUP BY t2.重复列 ) AS t3
	ON t1.重复列 = t3.重复列 AND t1.时间列 = t3.时间列

Ideas:
1) Primero agrupe la tabla por grupo y consulte la columna de tiempo más grande en cada grupo, y obtenga una subtabla;
2) Luego asocie la tabla original y la subtabla a través de columnas repetidas y columnas de tiempo;
esta consulta viene out Los datos se basan en los datos originales. Después de eliminar la duplicación, se obtiene toda la información de campo del registro con mayor tiempo.

Implementación 2.SQL

SELECT
	t1.USER_ID,
	t1.last_updated_date,
	t1.ID,
	t1.problems 
FROM
	t_iov_help_feedback t1
	INNER JOIN ( SELECT t2.USER_ID, max( t2.last_updated_date ) AS last_updated_date FROM t_iov_help_feedback t2 GROUP BY t2.USER_ID ) AS t3 
	ON t1.USER_ID = t3.USER_ID AND t1.last_updated_date = t3.last_updated_date

3. Resultados de la ejecución

Inserte la descripción de la imagen aquí

Puede verse que los dos registros con USER_ID 1 y 2 son los datos con un tiempo relativamente reciente.
De esta forma se consigue el efecto deseado ~

Supongo que te gusta

Origin blog.csdn.net/u012660464/article/details/113972869
Recomendado
Clasificación