表a
date time aa bb
0201 0930 15 ----------15
0201 0940 14 ----------15
0201 0945 17 ----------17
0201 0950 18 ----------18
0202 0920 12 ----------12
0202 0930 18 ----------18
0202 0950 15 ----------18
0202 0955 16 ----------18
0203 0920 13 ----------13
0203 0925 15 ----------15
0203 0930 19 ----------19
0203 0940 14 ----------19
... .... .. ..
... .... .. ..
... .... .. ..date是日期如2月1日 time为时间如9点30分 bb列为以当日date为准取当前time的最大值
请问如何查询bb列的值
date time aa bb
0201 0930 15 ----------15
0201 0940 14 ----------15
0201 0945 17 ----------17
0201 0950 18 ----------18
0202 0920 12 ----------12
0202 0930 18 ----------18
0202 0950 15 ----------18
0202 0955 16 ----------18
0203 0920 13 ----------13
0203 0925 15 ----------15
0203 0930 19 ----------19
0203 0940 14 ----------19
... .... .. ..
... .... .. ..
... .... .. ..date是日期如2月1日 time为时间如9点30分 bb列为以当日date为准取当前time的最大值
请问如何查询bb列的值
解决方案 »
- server2005/2008 char,nchar,varchar,nvarchar这四个有什么区别
- 将excel表导入sql 2000中时,导入不进去,过程没有出错,但是数据进不去
- xp_cmdshell如何执行多条语句?
- update 可以选择吗?求一SQL!!!!!!
- 求解:怎样获得数据库中大于且最接近当前时间的纪录?在线=
- 超出了触发器的最大嵌套层次??
- NULL值问题
- 用什么快捷键给选定的多行语句加注释(前面加--)
- 在Insert 语句中能有子查询吗??
- 怎样实现数据库间的同步?5555555,急急急急急
- 怎么把远程数据库进行备份或生成sql文件?
- 数据库SQL语言,如何在一个表中建立由两个外码组成的主码?请指教!
from 表a t
a.*,b.date
from
a,(select [date],max(aa) from a group by [date])b
where
a.[date]=b.[date]
-- Author : htl258(Tony)
-- Date : 2010-04-05 22:49:02
-- Version:Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86)
-- Jul 9 2008 14:43:34
-- Copyright (c) 1988-2008 Microsoft Corporation
-- Developer Edition on Windows NT 5.1 <X86> (Build 2600: Service Pack 2)
--------------------------------------------------------------------------
--> 生成测试数据表:aIF NOT OBJECT_ID('[a]') IS NULL
DROP TABLE [a]
GO
CREATE TABLE [a]([date] NVARCHAR(10),[time] NVARCHAR(10),[aa] INT,[bb] INT)
INSERT [a]
SELECT '0201','0930',15,15 UNION ALL
SELECT '0201','0940',14,15 UNION ALL
SELECT '0201','0945',17,17 UNION ALL
SELECT '0201','0950',18,18 UNION ALL
SELECT '0202','0920',12,12 UNION ALL
SELECT '0202','0930',18,18 UNION ALL
SELECT '0202','0950',15,18 UNION ALL
SELECT '0202','0955',16,18 UNION ALL
SELECT '0203','0920',13,13 UNION ALL
SELECT '0203','0925',15,15 UNION ALL
SELECT '0203','0930',19,19 UNION ALL
SELECT '0203','0940',14,19
GO
--SELECT * FROM [a]-->SQL查询如下:
select distinct [date],bb=(select top 1 bb from a where date=t.date order by time desc) from a t
/*
date bb
---------- -----------
0201 18
0202 18
0203 19(3 行受影响)
*/
-- Author : htl258(Tony)
-- Date : 2010-04-05 22:49:02
-- Version:Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86)
-- Jul 9 2008 14:43:34
-- Copyright (c) 1988-2008 Microsoft Corporation
-- Developer Edition on Windows NT 5.1 <X86> (Build 2600: Service Pack 2)
--------------------------------------------------------------------------
--> 生成测试数据表:aIF NOT OBJECT_ID('[a]') IS NULL
DROP TABLE [a]
GO
CREATE TABLE [a]([date] NVARCHAR(10),[time] NVARCHAR(10),[aa] INT,[bb] INT)
INSERT [a]
SELECT '0201','0930',15,15 UNION ALL
SELECT '0201','0940',14,15 UNION ALL
SELECT '0201','0945',17,17 UNION ALL
SELECT '0201','0950',18,18 UNION ALL
SELECT '0202','0920',12,12 UNION ALL
SELECT '0202','0930',18,18 UNION ALL
SELECT '0202','0950',15,18 UNION ALL
SELECT '0202','0955',16,18 UNION ALL
SELECT '0203','0920',13,13 UNION ALL
SELECT '0203','0925',15,15 UNION ALL
SELECT '0203','0930',19,19 UNION ALL
SELECT '0203','0940',14,19
GO
--SELECT * FROM [a]-->SQL查询如下:
select distinct t.date, b.bb
from a t
cross apply (select top 1 bb from a where t.date=date order by time desc) b
/*
date bb
---------- -----------
0201 18
0202 18
0203 19(3 行受影响)
*/2005也可以用apply
0201 0930 15 ----------15
0201 0940 14 ----------15
0201 0945 17 ----------17
0201 0950 18 ----------18
0202 0920 12 ----------12
0202 0930 18 ----------18
0202 0950 15 ----------18
0202 0955 16 ----------18
0203 0920 13 ----------13
0203 0925 15 ----------15
0203 0930 19 ----------19
0203 0940 14 ----------19bb列的取值是每天的第一条数据开始到当前时间的最大aa的值 第一条bb的值为aa的值
0201 0930 15 ----------15 2月1日第一条数据
0201 0940 14 ----------15
0201 0945 17 ----------17
0201 0950 18 ----------18
0202 0920 12 ----------12 2月2日第一条数据
0202 0930 18 ----------18
0202 0950 15 ----------18
0202 0955 16 ----------18
0203 0920 13 ----------13 2月3日第一条数据
0203 0925 15 ----------15
0203 0930 19 ----------19
0203 0940 14 ----------19
0201 0930 15
0201 0940 14
0201 0945 17
0201 0950 18
0202 0920 12
0202 0930 18
0202 0950 15
0202 0955 16
0203 0920 13
0203 0925 15
0203 0930 19
0203 0940 14就这些数据,bb列的结果为如何,如果没规律,请标识说明。
0201 0930 15 15
0201 0940 14 15
0201 0945 17 17
0201 0950 18 18
0202 0920 12 12
0202 0930 18 18
0202 0950 15 18
0202 0955 16 18
0203 0920 13 13
0203 0925 15 15
0203 0930 19 19
0203 0940 14 19
bb列的取值是每天的第一条数据开始到当前时间的最大aa的值 第一条bb的值为aa的值
-- Author : htl258(Tony)
-- Date : 2010-04-06 00:09:16
-- Version:Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86)
-- Jul 9 2008 14:43:34
-- Copyright (c) 1988-2008 Microsoft Corporation
-- Developer Edition on Windows NT 5.1 <X86> (Build 2600: Service Pack 2)
--------------------------------------------------------------------------
--> 生成测试数据表:aIF NOT OBJECT_ID('[a]') IS NULL
DROP TABLE [a]
GO
CREATE TABLE [a]([date] NVARCHAR(10),[time] NVARCHAR(10),[aa] INT,[bb] INT)
INSERT [a]
SELECT '0201','0930',15,NULL UNION ALL
SELECT '0201','0940',14,NULL UNION ALL
SELECT '0201','0945',17,NULL UNION ALL
SELECT '0201','0950',18,NULL UNION ALL
SELECT '0202','0920',12,NULL UNION ALL
SELECT '0202','0930',18,NULL UNION ALL
SELECT '0202','0950',15,NULL UNION ALL
SELECT '0202','0955',16,NULL UNION ALL
SELECT '0203','0920',13,NULL UNION ALL
SELECT '0203','0925',15,NULL UNION ALL
SELECT '0203','0930',19,NULL UNION ALL
SELECT '0203','0940',14,NULL
GO
--SELECT * FROM [a]-->SQL查询如下:
--查询:
select *,bb=(select MAX(aa) from a where date=t.date and time<=t.time) from a t
--更新:
update a set
bb=(select MAX(aa) from a t where a.date=t.date and t.time<=a.time)
--更新结果:
select * from a
/*
date time aa bb
---------- ---------- ----------- -----------
0201 0930 15 15
0201 0940 14 15
0201 0945 17 17
0201 0950 18 18
0202 0920 12 12
0202 0930 18 18
0202 0950 15 18
0202 0955 16 18
0203 0920 13 13
0203 0925 15 15
0203 0930 19 19
0203 0940 14 19(12 行受影响)*/