<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->--
假如DB2中转换varchar型数据为int行数据为cast,同SQL server一样.
select
t.
*
from
testsql t
where
cast
(hours
as
int
)
=
(
select
max
(
cast
(hours
as
int
))
from
testsql
where
name
=
t.name)
order
by
name
--
类似SQL server的诸多写法见下:
--
按某一字段分组取最大(小)值所在行的数据
(爱新觉罗.毓华
2007
-
10
-
23于浙江杭州)
/*
数据如下:
name val memo
a 2 a2(a的第二个值)
a 1 a1--a的第一个值
a 3 a3:a的第三个值
b 1 b1--b的第一个值
b 3 b3:b的第三个值
b 2 b2b2b2b2
b 4 b4b4
b 5 b5b5b5b5b5
*/
--
创建表并插入数据:
create
table
tb(name
varchar
(
10
),val
int
,memo
varchar
(
20
))
insert
into
tb
values
(
'
a
'
,
2
,
'
a2(a的第二个值)
'
)
insert
into
tb
values
(
'
a
'
,
1
,
'
a1--a的第一个值
'
)
insert
into
tb
values
(
'
a
'
,
3
,
'
a3:a的第三个值
'
)
insert
into
tb
values
(
'
b
'
,
1
,
'
b1--b的第一个值
'
)
insert
into
tb
values
(
'
b
'
,
3
,
'
b3:b的第三个值
'
)
insert
into
tb
values
(
'
b
'
,
2
,
'
b2b2b2b2
'
)
insert
into
tb
values
(
'
b
'
,
4
,
'
b4b4
'
)
insert
into
tb
values
(
'
b
'
,
5
,
'
b5b5b5b5b5
'
)
go
--
一、按name分组取val最大的值所在行的数据。
--
方法1:
select
a.
*
from
tb a
where
val
=
(
select
max
(val)
from
tb
where
name
=
a.name)
order
by
a.name
--
方法2:
select
a.
*
from
tb a
where
not
exists
(
select
1
from
tb
where
name
=
a.name
and
val
>
a.val)
--
方法3:
select
a.
*
from
tb a,(
select
name,
max
(val) val
from
tb
group
by
name) b
where
a.name
=
b.name
and
a.val
=
b.val
order
by
a.name
--
方法4:
select
a.
*
from
tb a
inner
join
(
select
name ,
max
(val) val
from
tb
group
by
name) b
on
a.name
=
b.name
and
a.val
=
b.val
order
by
a.name
--
方法5
select
a.
*
from
tb a
where
1
>
(
select
count
(
*
)
from
tb
where
name
=
a.name
and
val
>
a.val )
order
by
a.name
/*
name val memo
---------- ----------- --------------------
a 3 a3:a的第三个值
b 5 b5b5b5b5b5
*/
--
二、按name分组取val最小的值所在行的数据。
--
方法1:
select
a.
*
from
tb a
where
val
=
(
select
min
(val)
from
tb
where
name
=
a.name)
order
by
a.name
--
方法2:
select
a.
*
from
tb a
where
not
exists
(
select
1
from
tb
where
name
=
a.name
and
val
<
a.val)
--
方法3:
select
a.
*
from
tb a,(
select
name,
min
(val) val
from
tb
group
by
name) b
where
a.name
=
b.name
and
a.val
=
b.val
order
by
a.name
--
方法4:
select
a.
*
from
tb a
inner
join
(
select
name ,
min
(val) val
from
tb
group
by
name) b
on
a.name
=
b.name
and
a.val
=
b.val
order
by
a.name
--
方法5
select
a.
*
from
tb a
where
1
>
(
select
count
(
*
)
from
tb
where
name
=
a.name
and
val
<
a.val)
order
by
a.name
/*
name val memo
---------- ----------- --------------------
a 1 a1--a的第一个值
b 1 b1--b的第一个值
*/
--
三、按name分组取第一次出现的行所在的数据。
select
a.
*
from
tb a
where
val
=
(
select
top
1
val
from
tb
where
name
=
a.name)
order
by
a.name
/*
name val memo
---------- ----------- --------------------
a 2 a2(a的第二个值)
b 1 b1--b的第一个值
*/
--
四、按name分组随机取一条数据。
select
a.
*
from
tb a
where
val
=
(
select
top
1
val
from
tb
where
name
=
a.name
order
by
newid
())
order
by
a.name
/*
name val memo
---------- ----------- --------------------
a 1 a1--a的第一个值
b 5 b5b5b5b5b5
*/
--
五、按name分组取最小的两个(N个)val
select
a.
*
from
tb a
where
2
>
(
select
count
(
*
)
from
tb
where
name
=
a.name
and
val
<
a.val )
order
by
a.name,a.val
select
a.
*
from
tb a
where
val
in
(
select
top
2
val
from
tb
where
name
=
a.name
order
by
val)
order
by
a.name,a.val
select
a.
*
from
tb a
where
exists
(
select
count
(
*
)
from
tb
where
name
=
a.name
and
val
<
a.val
having
Count
(
*
)
<
2
)
order
by
a.name
/*
name val memo
---------- ----------- --------------------
a 1 a1--a的第一个值
a 2 a2(a的第二个值)
b 1 b1--b的第一个值
b 2 b2b2b2b2
*/
--
六、按name分组取最大的两个(N个)val
select
a.
*
from
tb a
where
2
>
(
select
count
(
*
)
from
tb
where
name
=
a.name
and
val
>
a.val )
order
by
a.name,a.val
select
a.
*
from
tb a
where
val
in
(
select
top
2
val
from
tb
where
name
=
a.name
order
by
val
desc
)
order
by
a.name,a.val
select
a.
*
from
tb a
where
exists
(
select
count
(
*
)
from
tb
where
name
=
a.name
and
val
>
a.val
having
Count
(
*
)
<
2
)
order
by
a.name
/*
name val memo
---------- ----------- --------------------
a 2 a2(a的第二个值)
a 3 a3:a的第三个值
b 4 b4b4
b 5 b5b5b5b5b5
*/
--
七,如果整行数据有重复,所有的列都相同。
/*
数据如下:
name val memo
a 2 a2(a的第二个值)
a 1 a1--a的第一个值
a 1 a1--a的第一个值
a 3 a3:a的第三个值
a 3 a3:a的第三个值
b 1 b1--b的第一个值
b 3 b3:b的第三个值
b 2 b2b2b2b2
b 4 b4b4
b 5 b5b5b5b5b5
*/
--
在sql server 2000中只能用一个临时表来解决,生成一个自增列,先对val取最大或最小,然后再通过自增列来取数据。
--
创建表并插入数据:
create
table
tb(name
varchar
(
10
),val
int
,memo
varchar
(
20
))
insert
into
tb
values
(
'
a
'
,
2
,
'
a2(a的第二个值)
'
)
insert
into
tb
values
(
'
a
'
,
1
,
'
a1--a的第一个值
'
)
insert
into
tb
values
(
'
a
'
,
1
,
'
a1--a的第一个值
'
)
insert
into
tb
values
(
'
a
'
,
3
,
'
a3:a的第三个值
'
)
insert
into
tb
values
(
'
a
'
,
3
,
'
a3:a的第三个值
'
)
insert
into
tb
values
(
'
b
'
,
1
,
'
b1--b的第一个值
'
)
insert
into
tb
values
(
'
b
'
,
3
,
'
b3:b的第三个值
'
)
insert
into
tb
values
(
'
b
'
,
2
,
'
b2b2b2b2
'
)
insert
into
tb
values
(
'
b
'
,
4
,
'
b4b4
'
)
insert
into
tb
values
(
'
b
'
,
5
,
'
b5b5b5b5b5
'
)
go
select
*
, px
=
identity
(
int
,
1
,
1
)
into
tmp
from
tb
select
m.name,m.val,m.memo
from
(
select
t.
*
from
tmp t
where
val
=
(
select
min
(val)
from
tmp
where
name
=
t.name)
) m
where
px
=
(
select
min
(px)
from
(
select
t.
*
from
tmp t
where
val
=
(
select
min
(val)
from
tmp
where
name
=
t.name)
) n
where
n.name
=
m.name)
drop
table
tb,tmp
/*
name val memo
---------- ----------- --------------------
a 1 a1--a的第一个值
b 1 b1--b的第一个值
(2 行受影响)
*/
--
在sql server 2005中可以使用row_number函数,不需要使用临时表。
--
创建表并插入数据:
create
table
tb(name
varchar
(
10
),val
int
,memo
varchar
(
20
))
insert
into
tb
values
(
'
a
'
,
2
,
'
a2(a的第二个值)
'
)
insert
into
tb
values
(
'
a
'
,
1
,
'
a1--a的第一个值
'
)
insert
into
tb
values
(
'
a
'
,
1
,
'
a1--a的第一个值
'
)
insert
into
tb
values
(
'
a
'
,
3
,
'
a3:a的第三个值
'
)
insert
into
tb
values
(
'
a
'
,
3
,
'
a3:a的第三个值
'
)
insert
into
tb
values
(
'
b
'
,
1
,
'
b1--b的第一个值
'
)
insert
into
tb
values
(
'
b
'
,
3
,
'
b3:b的第三个值
'
)
insert
into
tb
values
(
'
b
'
,
2
,
'
b2b2b2b2
'
)
insert
into
tb
values
(
'
b
'
,
4
,
'
b4b4
'
)
insert
into
tb
values
(
'
b
'
,
5
,
'
b5b5b5b5b5
'
)
go
select
m.name,m.val,m.memo
from
(
select
*
, px
=
row_number()
over
(
order
by
name , val)
from
tb
) m
where
px
=
(
select
min
(px)
from
(
select
*
, px
=
row_number()
over
(
order
by
name , val)
from
tb
) n
where
n.name
=
m.name)
drop
table
tb
/*
name val memo
---------- ----------- --------------------
a 1 a1--a的第一个值
b 1 b1--b的第一个值
(2 行受影响)
*/
相关推荐
SQl去掉HTML标签函数 彻底防止SQL注入
--去除字段中符号,只保留数字和字母sql-- create FUNCTION DBO.REMOVE_SYMBLE(@S VARCHAR(100)) RETURNS VARCHAR(100) AS BEGIN DECLARE @SQL VARCHAR(100) SET @SQL=''
本文详细介绍了如何使用SQL去除表中的重复数据,并提供了一些性能优化的建议。通过这些方法和技术的应用,可以有效地提高数据质量和数据库系统的整体性能。希望这些知识能够帮助你在实际工作中更加高效地处理数据...
sql去掉最后一个字符,sql去掉最后一个字符
在plsql把一个sql语句美化后要复制到程序里使用时,就会发现有多余的空格和换行符,此程序将美化后的sql语句还原成1行sql语句
本文将详细讲解如何解决SQL Server中去除浮点数或定点数尾部多余的零的问题。 首先,我们需要理解SQL Server中数值类型的存储机制。浮点数(float)是一种近似值数据类型,它使用二进制浮点表示法,这意味着它在...
SQl去掉HTML標籤.txt use master go sp_configure 'show advanced options', 1 GO RECONFIGURE; GO sp_configure 'Ole Automation Procedures', 1 GO RECONFIGURE; GO
在SQL中,有时候我们需要处理字符串,去除重复的字符,以达到特定的数据处理目的。这个问题可以通过创建自定义函数来解决,正如题目和描述中所示。在给出的示例中,我们看到一个名为`CompareString`的SQL函数,它...
本文将深入探讨如何在PowerDesigner中去除生成SQL中的引号,以提高SQL脚本的兼容性和执行效率。 ### PowerDesigner简介 PowerDesigner是Sybase(现为SAP)公司推出的一款集成化数据建模工具,它提供了全面的数据...
各种去除重复的sql语句,日常常用,适合一些刚开始学习的基础人员
SQL中的取整函数 --遇到小数位就加1,非四舍五入 select CEILING(3.1) 结果为:4 --保留两位小数 1. 使用 Round() 函数,如 Round(@num,2) ,其中参数 2 表示 保留两位有效数字。 缺点:Round() 只是负责四舍五入到...
### SQL去除字符串中的空格 在SQL中,经常会遇到需要清理数据的情况,特别是处理文本字段时,去除字符串两端或中间的空格是非常常见的需求。本文将详细介绍如何使用SQL中的`LTRIM()`, `RTRIM()` 和 `TRIM()` 函数来...
当我们面对数据表中存在多条相同记录的问题时,需要采取策略来去除这些重复项,确保数据的唯一性和准确性。以下是一些关于如何在SQL中去重的关键知识点: 1. **DISTINCT关键字**:最简单的方法是使用`SELECT ...
本人开发人员,平常也是在CSDN下载资料,现在不需要积分的少了,所以我也得赚点积分,绝对提高你的开发效率。eclipse开发java使用mybatis打印不带问号的可执行sql
在SQL Server中,处理字符串时,经常会遇到需要去除字符串中空格的情况。这可能是为了确保数据的准确性,或者为了满足特定的格式要求。本篇文章将详细介绍如何在SQL Server中使用不同的函数来去除字符串中的空格。 ...
### SQL去除重复数据的方法 #### 1. 使用`DISTINCT`关键字 `DISTINCT`是最常见的用于去除重复记录的关键字。它可以用来返回唯一不同的值。 **语法示例:** ```sql SELECT DISTINCT column_name FROM table_name; `...
SQL语句去掉重复记录,获取重复记录 SQL语句去掉重复记录、获取重复记录是数据库管理系统中非常重要的一个操作。下面,我们将详细介绍如何使用SQL语句来实现这两个操作。 去掉重复记录 在数据库中,重复记录是指...
本文将详细介绍如何使用T-SQL(SQL Server的Transact-SQL扩展)来去除字符串中的HTML标签。 首先,我们来看一下提供的代码片段。这个示例创建了一个名为`dbo.removehtml`的用户定义函数,用于从输入的字符串中删除...
SQL 清除文本中的换行符、回车符、制表符
在SQL Server 2008中,XML是一个重要的数据类型,它允许数据库存储和处理XML格式的数据。XML(eXtensible Markup Language)是一种标记语言,用于描述数据结构,其特点是自描述性和灵活性,使得数据能在不同的系统...