查询分组数据指行条件满足的行的上一条记录的技巧
2010-03-26 11:37
447 查看
--------------------------------------------------------------------------
-- Author : htl258(Tony)
-- Date : 2010-03-26 11:01:09
-- Version:Microsoft SQL Server 2008 (SP1) - 10.0.2531.0 (Intel X86)
-- Mar 29 2009 10:27:29
-- Copyright (c) 1988-2008 Microsoft Corporation
-- Developer Edition on Windows NT 5.1 <X86> (Build 2600: Service Pack 2)
--------------------------------------------------------------------------
--> 生成测试数据表:tb
IF NOT OBJECT_ID('[tb]') IS NULL
DROP TABLE [tb]
GO
CREATE TABLE [tb]([A] NVARCHAR(10),[B] NVARCHAR(10),[C] NVARCHAR(10))
INSERT [tb]
SELECT '00001','01','aaa' UNION ALL
SELECT '00001','02','bbb' UNION ALL
SELECT '00002','01','www' UNION ALL
SELECT '00002','02','yyy' UNION ALL
SELECT '00002','03','ttt' UNION ALL
SELECT '00002','04','bbb'
GO
--SELECT * FROM [tb]
-->SQL查询如下:
declare @c nvarchar(10)
set @c='bbb'
select a,b,c=(select top 1 c from tb where a=t.A and b<t.B order by b desc)
from tb t
where c='bbb'
/*
a b c
---------- ---------- ----------
00001 02 aaa
00002 04 ttt
(2 行受影响)
*/
-- Author : htl258(Tony)
-- Date : 2010-03-26 11:01:09
-- Version:Microsoft SQL Server 2008 (SP1) - 10.0.2531.0 (Intel X86)
-- Mar 29 2009 10:27:29
-- Copyright (c) 1988-2008 Microsoft Corporation
-- Developer Edition on Windows NT 5.1 <X86> (Build 2600: Service Pack 2)
--------------------------------------------------------------------------
--> 生成测试数据表:tb
IF NOT OBJECT_ID('[tb]') IS NULL
DROP TABLE [tb]
GO
CREATE TABLE [tb]([A] NVARCHAR(10),[B] NVARCHAR(10),[C] NVARCHAR(10))
INSERT [tb]
SELECT '00001','01','aaa' UNION ALL
SELECT '00001','02','bbb' UNION ALL
SELECT '00002','01','www' UNION ALL
SELECT '00002','02','yyy' UNION ALL
SELECT '00002','03','ttt' UNION ALL
SELECT '00002','04','bbb'
GO
--SELECT * FROM [tb]
-->SQL查询如下:
declare @c nvarchar(10)
set @c='bbb'
select a,b,c=(select top 1 c from tb where a=t.A and b<t.B order by b desc)
from tb t
where c='bbb'
/*
a b c
---------- ---------- ----------
00001 02 aaa
00002 04 ttt
(2 行受影响)
*/
相关文章推荐
- mysql查询获取分组后最新的一条记录,策略:先排序,然后在次分组查询(默认第一条),就是最新的一条数据了
- Sql2005 tips 按照某些条件(一个or多个)分组,取分组中满足某个条件的一条记录
- SQL学习之查询技巧 查询第3的数据 用一条语句分组,排序 并查询某一排名
- SQL学习之查询技巧 查询第3的数据 用一条语句分组,排序 并查询某一排名
- sql 一个6亿的表a,一个3亿的表b,通过外间tid关联,你如何最快的查询出满足条件的第50000到第50200中的这200条数据记录。
- 能找到满足条件的记录,则统统列出来。不存在满足条件的记录,则列出来一条“补null”的记录
- Mysql 按条件排序查询一条记录 top 1 对应Mysql的LIMIT 关键字
- PHP查询数据库中满足条件的记录数
- MYSQL数据库(十)- 数据表的插入(insert)、删(delete)、改(update)、查(select)、group by 分组、having语句设置分组条件,order by查询结果排序,
- MySQL查询当前数据上一条和下一条的记录
- 用一条SQL语句查询分组前三名数据
- 查询数据表 最后一条记录
- PHP查询数据库中满足条件的记录条数(两种实现方法)
- Oracle查询重复数据并删除,只保留一条记录
- oracle查询分组数据中的最后一条数据和每组的数量
- HQL取满足条件最新一条记录(max()函数的使用)
- SQL分组查询,结果只取最新一条记录
- Oracle查询重复数据并删除,只保留一条记录
- Oracle查询重复数据并删除,只保留一条记录
- Oracle查询重复数据并删除,只保留一条记录