SQL高手快来,请教一个看似简单的SQL语句

leeyoong 2001-08-08 10:15:52
假设存在一个表table,结构如下:
部门 品种编号 结存日期 数量
0001 A0001 2001.05.01 5
0001 A0002 2001.05.01 6
0002 B0001 2001.05.01 10
0003 A0002 2001.05.01 8
0001 A0001 2001.08.01 6
0001 A0002 2001.08.01 16
0002 ......
......
其中,主键为 部门+品种编号+结存日期;
请问,如果不使用子查询,怎样用一个Select语句得到结存日期最大的所有记录?
结存日期列中存在大量重复值,如何做可以使得效率最高?
...全文
149 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_13439718 2001-08-10
  • 打赏
  • 举报
回复
未什么不用子查询啊
MountLion 2001-08-10
  • 打赏
  • 举报
回复
如果是VFP或者Access,可以:
select 部门,品种编号,max(结存日期),数量
from your_table;

其它数据库,我还没有发现有类似的功能。
生气呀!!!!!!!
z_net 2001-08-10
  • 打赏
  • 举报
回复
selct * from table where 结存日期=(select max(结存日期) from table)
veryeasy 2001-08-09
  • 打赏
  • 举报
回复
declare @maxdate
select @maxdate=max(结存日期) from table
select * from table where 结存日期=@maxdate
sywxy 2001-08-08
  • 打赏
  • 举报
回复
你这表实际上就是一个流水帐也可以再增加一个字段。这个字段是流水号,可作为主键。
sywxy 2001-08-08
  • 打赏
  • 举报
回复
结存日期最大是什么意思?
nuky 2001-08-08
  • 打赏
  • 举报
回复
我的意见是主键最好不用日期类型,一个是不好判断,另外效率也不好,
最好是把日期转成字符串
fwang_76 2001-08-08
  • 打赏
  • 举报
回复
sql server中
select top 1 with ties * from yourtable order by 结存日期 desc
leeyoong 2001-08-08
  • 打赏
  • 举报
回复
to yangzi:
没错,我实际就是要取得对应最大结存日期的‘部门+品种编号+数量’;
SQL Server6.5 or ASA6.0 都可以;

to nanman(南蛮) :
在结存日期字段上使用子查询,因为存在大量重复值,效率会很低!
  • 打赏
  • 举报
回复
为什么"不使用子查询"
yangzi 2001-08-08
  • 打赏
  • 举报
回复
我想你是要部门+品种编号的结存日期最大的纪录。是吗?
你用什麽数据库啊?
nononono 2001-08-08
  • 打赏
  • 举报
回复
不使用子查询不一定就是最有效的。

还是简单点的好,效率也不一定就低的受不了。
leeyoong 2001-08-08
  • 打赏
  • 举报
回复
up
leeyoong 2001-08-08
  • 打赏
  • 举报
回复
to yangzi(笨笨):
"select 部门+品种编号+convert(max(结存日期),char(8),112) from table order by 部门,品种编号" ,这个语句恐怕有问题。
注意:部门和品种编号并非是一个定值,在SQL中,它们不能与max(结存日期)做字符串连接。
leeyoong 2001-08-08
  • 打赏
  • 举报
回复
to sywxy(笑钰) :
这并不是流水帐,而是对另外一个表table2不定期的结转(简单插入)。
表table2的结构只有‘部门+品种编号+数量’,”部门+品种编号“为主键。
yangzi 2001-08-08
  • 打赏
  • 举报
回复
不太好实现。
我所能写出的语句只能是这样:
selct * from table where 部门+品种编号+convert(结存日期,char(8),112) =(select 部门+品种编号+convert(max(结存日期),char(8),112) from table order by 部门,品种编号)
panq 2001-08-08
  • 打赏
  • 举报
回复
select top 1 部门 品种编号 结存日期 数量 from table
order by 结存日期 desc;
//这是取结存日期最大的一条数据。还未能实现日期最大的所有记录。
//只是抛砖引玉
Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4

34,575

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧