商品表一个编号列,其他是商品基本信息列,
tb
ID,重量,重量1,金额,金额1。tb1
ID,字段名,修改时间,数值tb1里面字段名就是tb表中的“重量,重量1,金额,金额1”四列,只要修改tb中的这四列中其中一个就写一条到tb1中,如果4列都有修改,就写4条。现在要查询某个日期某个字段最新的数值select ID,,(select 数值from tb1 where ID=a.ID and 字段名='重量' and 修改时间=(select max(修改时间) from tb1 where ID=a.ID and col='重量'
修改时间<='2010-10-01'))
from tb a
现在数据量还不到1W,如果不要后面的子查询,1秒可以出来,这里有4列需要记录,加上4个子查询之后,要4-5秒,数据量还这么少,如果数据量大了,性能更差,大家帮忙看看有什么可以优化的没有。ID加了索引了。
tb
ID,重量,重量1,金额,金额1。tb1
ID,字段名,修改时间,数值tb1里面字段名就是tb表中的“重量,重量1,金额,金额1”四列,只要修改tb中的这四列中其中一个就写一条到tb1中,如果4列都有修改,就写4条。现在要查询某个日期某个字段最新的数值select ID,,(select 数值from tb1 where ID=a.ID and 字段名='重量' and 修改时间=(select max(修改时间) from tb1 where ID=a.ID and col='重量'
修改时间<='2010-10-01'))
from tb a
现在数据量还不到1W,如果不要后面的子查询,1秒可以出来,这里有4列需要记录,加上4个子查询之后,要4-5秒,数据量还这么少,如果数据量大了,性能更差,大家帮忙看看有什么可以优化的没有。ID加了索引了。
解决方案 »
- 用SQL语句,想一次把当前数据库所有表中的“收款日期”、“付款日期”字段名都改为“发生日期”,怎么办?
- sql server 2005怎样将非主键字段设置为值唯一
- 求一条SQL语句的写法,高分在线等
- "使用 Windows 身份验证"连接上 SQL Server2000 好慢?
- 请问一个简单的问题,如何查询出表中的字段并转成另一个表中的某列?详见问题!
- 急。。。。。如何在本地连接远程服务器上的SQL数据库?
- 声明一个时间变量与使用
- inner join on问题
- 查询相同的资料
- 关于image数据类型,有没有“直接”插入数据库的办法,而不通过用VB或别的程序
- SQL请教一个较难的问题!
- 如何审计数据表的变化?
没想到用join怎么做,因为join还得根据字段名过滤,而不仅仅是直接根据编号分组取最大。
as
(
select t.id,
t.col,
t.数值
from tb t
inner join
(
select ID,
COL,
max(修改时间) as 修改时间
from tb1
where 修改时间<='2010-10-01'
--and COL = '重量'
group by id,
col
)tt
on tt.id = t.id
and tt.col = t.col
and tt.修改时间 = t.修改时间
)
select a.*,
m.数值
from tb a
left join m
on a.id = m.id
and a.字段名 = m.col
with m
as
(
select t.id,
t.col,
t.数值
from tb t
inner join
(
select ID,
COL,
max(修改时间) as 修改时间
from tb1
where 修改时间<='2010-10-01'
--and COL = '重量'
group by id,
col
)tt
on tt.id = t.id
and tt.col = t.col
and tt.修改时间 = t.修改时间
)
select a.*,
m.数值
from tb a
left join m
on a.id = m.id
and a.字段名 = m.col
and a.[修改时间]<b.[修改时间])
from tb1 where 字段名='重量' and 修改时间<='2010-10-01')
select a.ID,b.数值
from tb a ,CET b where a.ID = b.ID and b.rn = 1