SQL按照某一列数据去重并显示整行信息

mysql按照某一字段去重,并显示其他字段信息。有时候会有一些这样的需求,就是按照sql中的某一列值去重,还要显示其他字段的信息。用distinct进行去重时不能显示整行的信息,对这种需求显然难以满足。

v准备工作

1.0 创建测试

CREATE TABLE `logtest` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
    `msg` varchar(500) NOT NULL,
    `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`)
)ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
insert into `logtest` (msg) values(‘bbbbbbbbbbbbb‘);
select * from logtest;

1.1 表中所有数据

vGroup by和Max写法

需求背景

按照时间升序在日志表中取出不msg不重复的前3条数据

select * from logtest
where id in (select Max(id) from logtest group by msg)
order by create_time asc limit 3;

原文地址:https://www.cnblogs.com/toutou/p/sql_distinct.html

时间: 2024-10-06 15:38:08

SQL按照某一列数据去重并显示整行信息的相关文章

Oracle SQL按照某一列数据去重并显示整行信息(以一列为基准去重)

总会碰到一些奇奇怪怪的需求,各种加字段阿.建视图阿等等,然后使用了group by 还是没有达到想要的结果,那咋办嘛. 0.需求背景  根据MLOT重复字段 取 TRANSACTIONTIME 最小时间的一列,  (MLOT已经用过group by分组 order by排序) 所以我们可以用(ROWNUM)伪列函数 +  (MAX)取最大值函数 ||  (MIN)取最小值函数配合 再次使用group by 分组 1.首先把问题表加上伪列(rownum)--记得根据你要分组的列排序一下 --表记得

DataTable中数据针对某列数据去重

//针对这些数据进行去重,取某一列就用这一列字段,把重复的去掉 DataSet ds = dao.get(); DataTable dt = ds.Table[0] DataView dv = dt.DefaultView; DataTable dt1 = dv.ToTable(true, "IADDDTIME"); for (int g = 0; g < dt1.Rows.Count; g++) { DateTime ITAADDDTIME = Convert.ToDateTi

SQL数据库查询一列数据返回一行

SQL:数据库合并列数据:遇到一个更新的问题 想要把查询到的数据某一列拼接成字符串形式返回用的是SQL数据库中的STUFF函数比如 查询到的表(u_College)如下Id Name Age Classify1 张一 18 一班2 张二 17 二班3 张三 19 三班->SQL语句SELECT distinct Classify=STUFF((SELECT distinct ','+ Classify FROM u_College FOR XML PATH('')),1,1,'') FROM u

Oracle 单列去重 显示单行所有列数据

问题:test_table 表中有 a,b,c 三个字段,求根据字段a 去除重复数据,得到去重后的整行数据 根据mysql的经验尝试以下方法均失败 1.使用 distinct 关键字 (oracle查询数据中,不允许非 distinct 标注字段 ) select count(distinct a),a,b,c from test_table; 2.使用 group by (oracle查询数据中不允许非分组字段) select a,b,c from test_table group by a;

sql处理带逗号的数据

这篇博客宗旨在于处理如何使用sql把带逗号的数据转换为表中的行以及将表中的行拼接成用逗号组成的数据. 具体代码如下功能写在注释里 --将有逗号的数据转换为一个表存储id加数据 GO DECLARE @Text VARCHAR(200) SET @Text = 'test1,test2' DECLARE @xml XML SET @xml = CONVERT(XML,'<a>'+ REPLACE(@Text,',','</a><a>')+'</a>') CRE

sql取出某一列不重复数据的ID解决办法

取出某一列不重复数据的ID表A有ID,BID,ITime三列BID可能会有重复的现在要从A表根据ITime降序排序取出ID来,且如果BID重复就只取第一条数据的ID应该如何实现?------解决方案-------------------- 如果id是递增的select min(id),BID,max(date)from tbl group by BID sql取出某一列不重复数据的ID解决办法,布布扣,bubuko.com

SQL列数据转换为字符串

行列转换,将列数据转换为字符串输出 DECLARE @center_JZHW VARCHAR(500) SET @center_JZHW = ( SELECT DISTINCT STUFF( ( SELECT ',' + ce_code FROM ap_center WITH ( NOLOCK ) WHERE CE_PROVINCE = '浙江省' ORDER BY ce_code FOR XML PATH('')), 1, 1, '') AS jzhw FROM ap_center t) SE

sql 语句 获取某张表某列字段最短的某几行数据

sql 语句 获取某张表某列字段最短的某几行数据 SELECT C_name,C_code FROM Catalog where LEN(C_code)=LEN((SELECT top 1 C_code FROM Catalog order By LEN(C_code))) 原文地址:https://www.cnblogs.com/woniucode/p/10455406.html

SQL Distinct处理多列的问题

今天在做SSIS的ETL工作时,其中一个left join组件的运行结果总是会多出一些记录.分析了一下,该问题的原因是右表中作为关联的那一列数据有重复.left join的运行策略可以理解为根据左表的每一条记录的关联字段去对照右表的关联字段,如果右表的关联字段存在重复,就会生成重复的记录.如果左表存在重复而右表无重复,则不会多出来记录.举个例子,如果左表a和右表b的数据分别如下所示 a表 ID Name 1 张三 2 李四 3 王五 4 王陆 b表 ID Description 1 内联部 1