根据最近时间求单价....SQL
2008-12-31 21:21
561 查看
CREATE TABLE tb(日期 datetime, 料号 NVARCHAR(30), 单价 int)
INSERT tb SELECT '2008/5/1','AAA',2
UNION ALL SELECT '2008/6/6','BBB',22
UNION ALL SELECT '2008/6/6','CCC ',12
UNION ALL SELECT '2008/7/3','BBB',21
UNION ALL SELECT '2008/7/9','AAA ',1
--select * from tb
--select distinct 料号 FROM TB
--select count (distinct 料号) from tb
--select TOP 1 日期 ,单价 from tb where 料号 ='AAA' order by 日期 DESC
create procedure sp_查询最近单价
WITH ENCRYPTION
AS
begin tran--启动事务
declare @ERROR int
set @ERROR=0
begin
declare @temp table
(
[日期] datetime,
[料号] NVARCHAR(30),
[单价] int
)
declare @tempdb料号 table
(
[id] int identity(1,1),
[料号] NVARCHAR(30)
)
declare @改后temp table
(
[日期] datetime,
[料号] NVARCHAR(30),
[单价] int
)
insert into @temp select * from tb
-- SELECT * FROM @tempdb
SET @ERROR =@ERROR +@@ERROR
IF (@ERROR <>0) GOTO EXT
insert into @tempdb料号 select DISTINCT 料号 from tb
-- SELECT * FROM @tempdb料号
SET @ERROR =@ERROR +@@ERROR
IF (@ERROR <>0) GOTO EXT
declare @temp日期 datetime,@temp料号 varchar(30),@temp单价 INT,@I int
set @i=1
select distinct 料号 FROM @tempdb料号 where id=@i
WHILE @@rowcount<>0
begin
select TOP 1 @temp日期=日期 ,@temp料号=料号,@temp单价=单价 from @temp where 料号 =(select distinct 料号 FROM @tempdb料号 where id=@i )
order by 日期 DESC
SET @ERROR =@ERROR +@@ERROR
IF (@ERROR <>0) GOTO EXT
INSERT INTO @改后temp VALUES(@temp日期,@temp料号,@temp单价)
SET @ERROR =@ERROR +@@ERROR
IF (@ERROR <>0) GOTO EXT
set @i=@i+1
select distinct 料号 FROM @tempdb料号 where id=@i
end
select * from @改后temp
end
--异常出口
EXT:
--判断执行状态
IF (@ERROR =0)
BEGIN
COMMIT
END
ELSE
ROLLBACK
exec sp_查询最近单价
结果:
2008-07-09 00:00:00.000 AAA 1
2008-07-03 00:00:00.000 BBB 21
2008-06-06 00:00:00.000 CCC 12
INSERT tb SELECT '2008/5/1','AAA',2
UNION ALL SELECT '2008/6/6','BBB',22
UNION ALL SELECT '2008/6/6','CCC ',12
UNION ALL SELECT '2008/7/3','BBB',21
UNION ALL SELECT '2008/7/9','AAA ',1
--select * from tb
--select distinct 料号 FROM TB
--select count (distinct 料号) from tb
--select TOP 1 日期 ,单价 from tb where 料号 ='AAA' order by 日期 DESC
create procedure sp_查询最近单价
WITH ENCRYPTION
AS
begin tran--启动事务
declare @ERROR int
set @ERROR=0
begin
declare @temp table
(
[日期] datetime,
[料号] NVARCHAR(30),
[单价] int
)
declare @tempdb料号 table
(
[id] int identity(1,1),
[料号] NVARCHAR(30)
)
declare @改后temp table
(
[日期] datetime,
[料号] NVARCHAR(30),
[单价] int
)
insert into @temp select * from tb
-- SELECT * FROM @tempdb
SET @ERROR =@ERROR +@@ERROR
IF (@ERROR <>0) GOTO EXT
insert into @tempdb料号 select DISTINCT 料号 from tb
-- SELECT * FROM @tempdb料号
SET @ERROR =@ERROR +@@ERROR
IF (@ERROR <>0) GOTO EXT
declare @temp日期 datetime,@temp料号 varchar(30),@temp单价 INT,@I int
set @i=1
select distinct 料号 FROM @tempdb料号 where id=@i
WHILE @@rowcount<>0
begin
select TOP 1 @temp日期=日期 ,@temp料号=料号,@temp单价=单价 from @temp where 料号 =(select distinct 料号 FROM @tempdb料号 where id=@i )
order by 日期 DESC
SET @ERROR =@ERROR +@@ERROR
IF (@ERROR <>0) GOTO EXT
INSERT INTO @改后temp VALUES(@temp日期,@temp料号,@temp单价)
SET @ERROR =@ERROR +@@ERROR
IF (@ERROR <>0) GOTO EXT
set @i=@i+1
select distinct 料号 FROM @tempdb料号 where id=@i
end
select * from @改后temp
end
--异常出口
EXT:
--判断执行状态
IF (@ERROR =0)
BEGIN
COMMIT
END
ELSE
ROLLBACK
exec sp_查询最近单价
结果:
2008-07-09 00:00:00.000 AAA 1
2008-07-03 00:00:00.000 BBB 21
2008-06-06 00:00:00.000 CCC 12
相关文章推荐
- 根据最近时间查单价.有点难度 不用游标
- 今天刚弄的sql查询的小问题,根据时间查询最近的条记录
- Magento ver. 1.5.1.0—根据系统当天时间,Order导出最近俩天的ERP需求数据SQL语句
- K-Backup技术文章:根据文件最近修改时间备份文件
- 每天进步一点点之SQL 获取表中某个时间字段离当前时间最近的几条
- 1.6 SQL (根据时间取值)
- 多条相同数据中,选根据选择最近时间一条记录
- sql DATEADD (Transact-SQL)根据需要返回时间,
- SQL 根据时间和打印状态抽取记录
- 2014-5-13-sql-时间转换-根据时间的分钟进行排序
- SQL 根据时间戳分组查询
- sql 相同字段的情况下 取时间最近的一条
- T-sql 根据日期时间 按年份、月份、天来统计
- 根据时间查询的sql格式
- 根据cron表达式计算最近几次的执行时间
- 根据ajax从服务器获取数据的时间和ID,根据最近的时间,显示一个记录重复ID的数字
- Sql根据时间查询数据
- mysqlbinlog根据时间点提取SQL
- Java根据年龄段获取对应年份起始时间戳和最终时间戳、根据生日时间戳获取月份(与数据库的时间戳处理成的月份拼接成SQL条件)
- 一个有趣的SQL:根据登录日志,求系统无人登录时间