试试这个
SELECt * FROM final INNER JOIN(SELECt Min(DDate + DTime) AS DDateTime, Angle FROM final GROUP BY AngleUNIOn SELECt Max(DDate + DTime) AS DDateTime, Angle FROM final GROUP BY Angle) mmON final.DDate + final.DTime = mm.DDateTime AND final.Angle = mm.Angle
请注意,在测试中,我将前两列的名称分别更改为DDate和DTime,因为Date和Time是保留字。
编辑
这使其变得相当困难,尤其是在没有LEAD / LAG功能的Access中。以下应该可以工作,但是有人可能会提供更好的解决方案!
SELECt final.* FROM final INNER JOIN(SELECt MIN(DDateTime) AS MDateTime, Angle FROM(SELECt (f.DDate+ f.DTime) AS DDateTime, f.Earth_Value, f.Mars_Value, f.Earth_Col, f.Mars_Col, f.Diff, f.Angle, f.Col_Apart,IIF(ISNULL((SELECT MIN(m.DDate + m.DTime) FROM final m where f.angle <> m.angle and (f.DDate+f.DTime) < (m.DDate+m.DTime))),(SELECt MAX(DDate+DTime) FROM final),(SELECt MIN(m.DDate + m.DTime) FROM final m where f.angle <> m.angle and (f.DDate+f.DTime) < (m.DDate+m.DTime))) AS NextChangeDateTimeFROM final f order by DDate, DTime) gGROUP BY g.Angle,g.NextChangeDateTimeUNIOnSELECt MAX(DDateTime) AS MDateTime, Angle FROM(SELECt (f.DDate+ f.DTime) AS DDateTime, f.Earth_Value, f.Mars_Value, f.Earth_Col, f.Mars_Col, f.Diff, f.Angle, f.Col_Apart,IIF(ISNULL((SELECT MIN(m.DDate + m.DTime) FROM final m where f.angle <> m.angle and (f.DDate+f.DTime) < (m.DDate+m.DTime))),(SELECt MAX(DDate+DTime) FROM final),(SELECt MIN(m.DDate + m.DTime) FROM final m where f.angle <> m.angle and (f.DDate+f.DTime) < (m.DDate+m.DTime))) AS NextChangeDateTimeFROM final f order by DDate, DTime) gGROUP BY g.Angle,g.NextChangeDateTime) FLDatesON final.DDate + final.DTime = FLDates.MDateTime
编辑2
从技术上讲,MS Access中没有诸如临时表之类的东西。实际上,您只是创建一个普通表并在每次要使用它时将其内容删除。
要创建表,您需要将此表复制到“查询窗口”(SQL视图)中,然后单击“运行”:
CREATE TABLE final ( DDate DATETIME NOT NULL, DTime DATETIME NOT NULL, Earth_Value DOUBLE NOT NULL, Mars_Value DOUBLE NOT NULL, Earth_ColINTEGER NOT NULL, Mars_ColINTEGER NOT NULL, DiffINTEGER NOT NULL);
然后在现有查询类型之前(您只需要第一行):
INSERT into finalSELECT etc.
现在,您将能够完全按原样运行我的查询。



