这个查询语句可以简化吗?

oXueYuZhiYing 2013-11-07 08:53:45
这个查询语句可以简化吗?

SELECT * FROM ICPrcPlyEntry AS Price INNER JOIN
(SELECT FItemID,FRelatedID,FCuryID,FUnitID,max(FBegDate) AS FBegDate FROM ICPrcPlyEntry
GROUP BY FItemID,FRelatedID,FUnitID,FCuryID) AS Ref
ON Ref.FItemID=Price.FItemID AND Ref.FRelatedID=Price.FRelatedID AND
Ref.FUnitID = Price.FUnitID AND Ref.FCuryID=Price.FCuryID AND Price.FBegDate=Ref.FBegDate


...全文
90 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
oXueYuZhiYing 2013-11-07
  • 打赏
  • 举报
回复
好的谢谢。。。。。。。。。。。
  • 打赏
  • 举报
回复
如果性能不好,可以尝试把inner join 改为inner hash join:


SELECT * 
FROM ICPrcPlyEntry AS Price 
INNER hash JOIN 
(
SELECT  FItemID,FRelatedID,
        FCuryID,FUnitID,
        max(FBegDate) AS FBegDate 
FROM ICPrcPlyEntry 
GROUP BY  FItemID,FRelatedID,FUnitID,FCuryID
) AS Ref 
ON 
 Ref.FItemID=Price.FItemID AND 
 Ref.FRelatedID=Price.FRelatedID AND
 Ref.FUnitID = Price.FUnitID AND 
 Ref.FCuryID=Price.FCuryID AND 
 Price.FBegDate=Ref.FBegDate

  • 打赏
  • 举报
回复
你这个是求最近一个日期的数据是吧,我给格式化了一下,基本上你的语句已经很优化了:

SELECT * 
FROM ICPrcPlyEntry AS Price 
INNER JOIN 
(
SELECT  FItemID,FRelatedID,
        FCuryID,FUnitID,
        max(FBegDate) AS FBegDate 
FROM ICPrcPlyEntry 
GROUP BY  FItemID,FRelatedID,FUnitID,FCuryID
) AS Ref 
ON 
 Ref.FItemID=Price.FItemID AND 
 Ref.FRelatedID=Price.FRelatedID AND
 Ref.FUnitID = Price.FUnitID AND 
 Ref.FCuryID=Price.FCuryID AND 
 Price.FBegDate=Ref.FBegDate
發糞塗牆 2013-11-07
  • 打赏
  • 举报
回复
目测了一下,应该没有简化的必要,从性能上来说加点where条件之外,也没什么好改写的空间。改写了说不定性能更差

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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