【问题标题】:SQL C# - filter identical entries via latest dateSQL C# - 通过最新日期过滤相同的条目
【发布时间】:2015-01-21 00:42:53
【问题描述】:

我正在通过 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);

但似乎无法使任何工作(我已经尝试了多种方法并意识到问题一定是我看错了),有人可以帮忙吗?

【问题讨论】:

    标签: c# sql select oledb


    【解决方案1】:

    这是您的查询:

    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;
    

    【讨论】:

    • 我试过了!谢谢你的回答,但我收到一个错误:(打开:System.Data.OleDb.OleDbException(0x80040E14):FROM 子句中的语法错误。在 System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr)在 System.Data.OleDb .OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult) ----- 谢谢你这么快!
    • 再次查看并尝试将此作为我的 SQL 命令: 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 我现在有一个错误告诉我找不到“A & C”...帮助!
    • @blindman457 。 . .我对此无能为力。您需要使用正确的表名称才能使任何查询起作用。我建议您从更简单的查询开始,以确保连接和名称正常工作。
    • 谢谢你的回答,我意识到一半的表实际上并没有在访问文件中,而是它们只是被它引用,我还能访问这些引用的表还是我必须去直接到包含它的另一个文件?
    猜你喜欢
    • 1970-01-01
    • 2014-06-26
    • 1970-01-01
    • 1970-01-01
    • 2015-11-05
    • 2014-12-21
    • 1970-01-01
    • 2019-09-21
    • 1970-01-01
    相关资源
    最近更新 更多