SQL Server:在select子句中使用max(date)与在where子句中使用它之间的区别

时间:2017-05-23 18:35:32

标签: sql-server

SELECT PositionToEffectDate as Current Date, PersonIdNo, PositionIdNo
  FROM tPERSON_POSITIONS
  WHERE PositionToEffectDate = (SELECT MAX(PositionToEffectDate) FROM tPERSON_POSITIONS)

GO

SELECT MAX(PositionToEffectDate) as CurrentDate, PersonIdNo, PositionIdNo
  FROM tPERSON_POSITIONS
  GROUP BY PersonIdNo,PositionIdNo,PositionToEffectDate

在上面的两个查询中,我试图按当前记录过滤结果,但第一个查询工作正常,而第二个查询只显示所有记录而不是当前记录。你能告诉我为什么两个查询都显示两种不同的结果吗?

2 个答案:

答案 0 :(得分:0)

First Query仅显示记录,你获得MAX(PositionToEffectDate),显示人员详细信息。

第二个查询,当你正在进行分组时,为每个PersonIdNo,PositionIdNo组合显示一条记录。 PersonIdNo的MAX(PositionToEffectDate),由于您的选择参数,每个组合都会显示PositionIdNo。

答案 1 :(得分:0)

第一个查询将仅根据PositionToEffectDate列为您提供表中的最新条目,而第二个查询将根据您的group by子句为您提供每个人的最新记录。

注意:为了使第二个查询正常工作,必须从group by子句中删除PositionToEffectDate列。