有表MG,MG有MG001,MG002,MG003数据列。
MG001为币别,MG002为汇率日期,MG003为汇率。
表MG有数据如下:
MG001 MG002 MG003
NTD 20081001 1.000
NTD 20081011 1.374
USD 20070701 9.874
USD 20081010 8.800
HKD 20081001 6.700
HKD 20070102 8.900求查询所得数据为每种币别的最后一个汇率,结果如下:
MG001 MG002 MG003
NTD 20081011 1.374
USD 20081010 8.800
HKD 20081001 6.700求SQL语句写法,谢谢!
MG001为币别,MG002为汇率日期,MG003为汇率。
表MG有数据如下:
MG001 MG002 MG003
NTD 20081001 1.000
NTD 20081011 1.374
USD 20070701 9.874
USD 20081010 8.800
HKD 20081001 6.700
HKD 20070102 8.900求查询所得数据为每种币别的最后一个汇率,结果如下:
MG001 MG002 MG003
NTD 20081011 1.374
USD 20081010 8.800
HKD 20081001 6.700求SQL语句写法,谢谢!
解决方案 »
- SQL2005 datetime类型字段默认值问题
- 如何在聚合语句中 使用列出所有聚合项的id 如表
- **********************请教一个关于查询的问题**************************
- 带小数的数据类型存储
- 求一个SQL语句
- 请教如何在SQL中讲VARCHAR类型如何在语句里实现转换为INT类型?
- 我的触发器
- 如何在GETDATE()增加X个小时,X分钟,X秒,按我的要求进行小时,分,秒的固定增加
- 关于多数据库中记录联合查询
- 日期处日问题:
- 如何使该登录用户有权限附加某个特定的文件夹中的数据库?怎么设置??等等待>>>>>
- OLAP,BI, SSIS 进度,日志,执行结果
select 'NTD' MG001,'20081001' MG002,'1.000' MG003 into #t union all
select 'NTD','20081011','1.374' union all
select 'USD','20070701','9.874' union all
select 'USD','20081010','8.800' union all
select 'HKD','20081001','6.700' union all
select 'HKD','20070102','8.900'--查询
select * from #t t where not exists(select * from #t where MG002>t.MG002 and MG001=t.MG001)/*结果
MG001 MG002 MG003
----- -------- -----
NTD 20081011 1.374
USD 20081010 8.800
HKD 20081001 6.700
*/
DECLARE @MG TABLE(MG001 VARCHAR(10),MG002 DATETIME,MG003 NUMERIC(10,3))
INSERT INTO @MG
SELECT 'NTD','20081001',1.000 UNION
SELECT 'NTD','20081011',1.374 UNION
SELECT 'USD','20070701',9.874 UNION
SELECT 'USD','20081010',8.800 UNION
SELECT 'HKD','20081001',6.700 UNION
SELECT 'HKD','20070102',8.900 SELECT M.MG001,CONVERT(varchar(10),M.MG002,112) AS MG002,MG003
FROM @MG M INNER JOIN
(
SELECT MG001,MAX(MG002) AS MG002
FROM @MG
GROUP BY MG001
) G
ON M.MG002=G.MG002 AND M.MG001=G.MG001
DECLARE @MG TABLE(MG001 VARCHAR(10),MG002 DATETIME,MG003 NUMERIC(10,3))
INSERT INTO @MG
SELECT 'NTD','20081001',1.000 UNION
SELECT 'NTD','20081011',1.374 UNION
SELECT 'USD','20070701',9.874 UNION
SELECT 'USD','20081010',8.800 UNION
SELECT 'HKD','20081001',6.700 UNION
SELECT 'HKD','20070102',8.900 SELECT M.MG001,CONVERT(varchar(10),M.MG002,112) AS MG002,MG003
FROM @MG M INNER JOIN
(
SELECT MG001,MAX(MG002) AS MG002
FROM @MG
GROUP BY MG001
) G
ON M.MG002=G.MG002 AND M.MG001=G.MG001
DECLARE @MG TABLE(MG001 VARCHAR(10),MG002 DATETIME,MG003 NUMERIC(10,3))
INSERT INTO @MG
SELECT 'NTD','20081001',1.000 UNION
SELECT 'NTD','20081011',1.374 UNION
SELECT 'USD','20070701',9.874 UNION
SELECT 'USD','20081010',8.800 UNION
SELECT 'HKD','20081001',6.700 UNION
SELECT 'HKD','20070102',8.900 SELECT M.MG001,CONVERT(varchar(10),M.MG002,112) AS MG002,MG003
FROM @MG M INNER JOIN
(
SELECT MG001,MAX(MG002) AS MG002
FROM @MG
GROUP BY MG001
) G
ON M.MG002=G.MG002 AND M.MG001=G.MG001