Sql server SQL Server:在select子句中使用max(date)与在where子句中使用max(date)的区别

Sql server SQL Server:在select子句中使用max(date)与在where子句中使用max(date)的区别,sql-server,Sql Server,在上面两个查询中,我试图按当前记录过滤结果,但第一个查询工作正常,而第二个查询只是显示所有记录,而不是当前记录。有人能告诉我为什么两个查询都显示两个不同的结果吗?第一个查询只显示记录,其中显示的是MAX(PositionToEffectDate),显示的是属于该查询的人员详细信息 第二个查询,为每个人显示一条记录No,PositionIdNo组合,就像您分组一样。人员的最大值(PositionToEffectDate)否,由于您选择了Station,每个组合上都会显示PositionIdNo。第

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

第一个查询只显示记录,其中显示的是MAX(PositionToEffectDate),显示的是属于该查询的人员详细信息


第二个查询,为每个人显示一条记录No,PositionIdNo组合,就像您分组一样。人员的最大值(PositionToEffectDate)否,由于您选择了Station,每个组合上都会显示PositionIdNo。

第一次查询仅显示记录,从中可以获得最大值(PositionToEffectDate),显示属于该组合的人员详细信息


第二个查询,为每个人显示一条记录No,PositionIdNo组合,就像您分组一样。PersonIdNo的最大值(PositionToEffectDate)由于您选择的状态,每个组合上都会显示PositionIdNo。

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


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

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


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

您在第二个查询中是按PositionToEffectDate分组的。将其从分组依据中删除。在第二个查询中,您正在按位置分组到生效日期。从group by中删除该列。如果我从group by子句中删除PositionToEffectDate列,它仍然会给我相同的结果。如果我从group by子句中删除PositionToEffectDate列,它仍然会给我相同的结果。即使我在第二次查询中删除group by子句,它仍然不会按当前值筛选结果即使我在第二个查询中删除了GROUPBY子句,它仍然不会按当前记录过滤结果。
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