2014-11-23 68 views
0

我正在通过SQL命令从C#访问数据库,并想知道如何读回整个表,但只能使用每个条目的最新日期。我的表如下:SQL C# - 通过最近的日期筛选相同的条目

表:

ID Name Begin Date Job Area Co-worker 
-------------------------------------------------- 
1   1/01/2001  M1  Comp3 John Do 
1   1/01/2003  M1  Comp3 Jane Do 
1   1/01/2010  C2  Comp3 Jane Do 
2   1/01/2010  C2  Comp3 John Do 
3   12/01/2003 A6  Comp1 Smith John 
3   12/01/2004 M2  Comp3 Smith Jack 

等等

我知道,表中有多个条目具有相同的ID,在不同时间与不同的作业/同事。我只想循环访问每个ID,并获取该ID的最新信息。我查找了几个小时,似乎无法找到任何有效的东西(C#似乎很难使用SQL JOIN命令)。我已经尝试了一些不同的方法,如:

cmd = new OleDbCommand("SELECT * FROM [A & C] INNER JOIN(SELECT [ID Name], MAX([Begin Date]) AS MaxDate, Job, [Job Area], Co-Worker FROM [A & C] GROUP BY [ID Name]) [A & C] ON([A & C]", connectionObject); 

,但似乎无法得到任何工作(我已经尝试过多种方式,实现了问题必须与我看着这个错误),任何人都可以帮忙吗?

回答

0

这是您的查询:

SELECT * 
FROM [A & C] INNER JOIN 
    (SELECT [ID Name], MAX([Begin Date]) AS MaxDate, Job, [Job Area], Co-Worker 
     FROM [A & C] 
     GROUP BY [ID Name] 
    ) [A & C] 
    ON ([A & C]; 

我想你想要这样的:

SELECT ac.* 
FROM [A & C] as ac INNER JOIN 
    (SELECT [ID Name], MAX([Begin Date]) AS MaxDate 
     FROM [A & C] as ac 
     GROUP BY [ID Name] 
    ) as ac2 
    ON ac.[ID Name] = ac2.[ID Name] and ac.[Begin Date] = ac2.MaxDate; 
+0

我试过!谢谢你的回答,但我得到了一个错误:( Openning:System.Data.OleDb.OleDbException(0x80040E14):FROM子句中的语法错误 at System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr) at System。 Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams,Object&executeResult)----- Thankyou太快了! – blindman457 2014-11-23 04:52:34

+0

再次看着它,并试图将其作为我的SQL命令: SELECT ac。* FROM [A&C] AS ac INNER JOIN (SELECT ID [ID Name],MAX([Begin Date])AS MaxDate FROM [A&C] AS ac GROUP BY [ID Name])AS ac2 ON ac。[ID Name] = ac2。[ID Name ] AND ac。[Begin Date] = ac2.MaxDate 我现在有一个错误,告诉我'A&C'找不到...帮助! – blindman457 2014-11-23 06:05:00

+0

@ blindman457 ......我无法帮助。你需要使用您的表格的正确名称以便任何查询工作。我建议你先从简单的查询开始,以确保连接和名称正常。 – 2014-11-23 13:12:51