我正在使用ADO从已关闭的Excel二进制文件中检索数据
我在该文件中有2个表格,我想要的是从 Sheet1 中检索 Sheet2 中存在ID的所有数据。
我能够做到这一点:
sqlstr = "SELECT e.NOTES, u.SPO, e.ID, e.REF, e.PID "
sqlstr = sqlstr & ", e.DESCRIPTION, e.CreateDate "
sqlstr = sqlstr & "FROM [Sheet2$] u "
sqlstr = sqlstr & "INNER JOIN [Sheet1$] e "
sqlstr = sqlstr & "ON e.ID = u.ID;"
如果特定ID在Sheet1中反映了2个或更多x但具有不同日期,则会出现问题 我需要检索具有最高数据的ID,因此我尝试以下内容:
sqlstr = "SELECT e.NOTES, u.SPO, e.ID, e.REF, e.PID "
sqlstr = sqlstr & ", e.DESCRIPTION, e.CreateDate "
sqlstr = sqlstr & "FROM [Sheet2$] u "
sqlstr = sqlstr & "INNER JOIN (SELECT ID, REF, PID, DESCRIPTION, NOTES, MAX(CreateDate) "
sqlstr = sqlstr & "FROM [Sheet1$] GROUP BY ID, REF, PID, DESCRIPTION, NOTES) e "
sqlstr = sqlstr & "ON e.ID = u.ID;"
不幸的是,这不起作用并且给了我这个错误:
我尝试隔离我的子查询,如下所示:
sqlstr = "SELECT ID, REF, PID, DESCRIPTION, NOTES, MAX(CreateDate) "
sqlstr = sqlstr & "FROM [Sheet1$] GROUP BY ID, REF, PID, DESCRIPTION, NOTES;"
工作正常。它仅返回具有最大日期的所有ID
我的问题是:
感谢任何帮助。
澄清:如果我使用SQL运行它,则子查询有效。我试图使用ADO使其工作。这是我第一次在SQL字符串中执行子查询,用于打开记录集。所以我想也许我做错了什么或做了一些超出范围的事情。
答案 0 :(得分:2)
你可能做得太过分了。
试试这个:
(未经测试的代码)
SELECT e.NOTES, u.SPO, e.ID, e.REF, e.PID, e.DESCRIPTION, MAX(e.CreateDate) as CreateDate
FROM [Sheet1$] e
INNER JOIN [Sheet2$] u ON e.ID = u.ID
GROUP BY e.ID, e.REF, e.PID, e.DESCRIPTION, e.NOTES, u.SPO
答案 1 :(得分:1)
我首先将Sheet1
加入Sheet2
,然后加入一个只有最大创建日期的子查询。像这样:
SELECT e.NOTES, u.SPO, e.ID, e.REF, e.PID, e.DESCRIPTION, e.CreateDate
FROM [Sheet2$] u
INNER JOIN [Sheet1$] e
ON e.ID = u.ID
INNER JOIN (
SELECT ID, MAX(CreateDate) AS MaxCD
FROM [Sheet1$]
GROUP BY ID
) AS MCD
ON e.ID = MCD.ID
AND e.CreateDate = MCD.MaxCD
这主要是做什么:
Sheet1
Sheet1
,但只有最高创建日期。