我编写了一个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]
非常感谢任何帮助,
感谢。
答案 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)