Access Select Top 1未返回所有行

时间:2016-06-09 13:23:23

标签: sql ms-access

我编写了一个select查询来从一个表(一个到多个)中获取前1个记录,该表有每个ID的多个记录。例如ID = 1,2和3 ..每个都有多行。该记录有一个Date字段,因此我按该Date字段排序,并按该日期获取最新记录。当我运行我的查询时,我缺少ID 1和4的记录。我检查了表,并且有2个记录。我做了一个不同的计数,它返回超过3000,我的查询返回1400.同样的ID也表1中列出了一些奇怪的事情。当我删除Top 1时,我看到了所有的ID。查询应该取每个ID的第一条记录,对吗?

这是我的查询

SELECT
table2.RecentDate,
table2.Name,
table2.Address,
table2.City,
table2.State

FROM [table1] 

INNER JOIN 
        (   SELECT  Top 1 *
            FROM    [table2]  
            ORDER BY [table2].RecentDate DESC

        ) table2
ON [table1].[ID] = table2.[ID]

非常感谢任何帮助,

感谢。

2 个答案:

答案 0 :(得分:0)

SELECT
table2.RecentDate,
table2.Name,
table2.Address,
table2.City,
table2.State

FROM [table2] 

INNER JOIN 
        (   SELECT  [ID], MAX(RecentDate) dt
            FROM    [table2]  
            GROUP BY [ID]    
        ) t2
ON [table2].[ID] = t2.[ID] and [table2].[RecentDate] = t2.[dt]

答案 1 :(得分:0)

您可以从table2获取最大行来执行此操作。它应该比使用TOP更有效,并返回你实际需要的东西。

SELECT
table2.RecentDate,
table2.Name,
table2.Address,
table2.City,
table2.State
FROM [table1] T1
INNER JOIN  [table2]  T2
ON T1.[ID] = T2.[ID]
AND T2.RECENT_DATE = (SELECT MAX(RECENT_DATE) FROM table2 T2E WHERE T2.ID=T2E.ID)

如果你不需要table1

select
table2.RecentDate,
table2.Name,
table2.Address,
table2.City,
table2.State
FROM [table2]  T2
WHERE T2.RECENT_DATE = (SELECT MAX(RECENT_DATE) FROM table2 T2E WHERE T2.ID=T2E.ID)