2014-11-23 2 views
0

Я получаю доступ к базе данных из C# через SQL-команды и задавался вопросом, как я могу прочитать всю таблицу, но только с последней датой для каждой записи. Моя таблица выглядит следующим образом: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 

и т.д ...

Я знаю, что таблица имеет несколько записей с одинаковым идентификатором, на разные сроки с различными заданиями/сотрудников , Я просто хочу выполнить цикл и для каждого идентификатора, получить последнюю информацию для этого идентификатора. Я искал часы и не могу найти ничего, что сработает (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

Я пробовал! Спасибо за ваш ответ, но я получил ошибку :( открывающимися: System.Data.OleDb.OleDbException (0x80040E14): Ошибка синтаксиса в предложении FROM в System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling (OleDbHResult ч) в системе.. Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult (tagDBPARAMS dbParams, Object & executeResult) ----- Спасибо за то, что вы так быстро! – blindman457

+0

снова посмотрел на него и попробовал это как мою команду SQL: SELECT ac. * FROM [A & C] AS AC INNER JOIN (SELECT [Идентификационное имя], MAX ([Дата начала]) AS MaxDate FROM [A & C] AS AC GROUP BY [ID Name]) AS ac2 ON ac. [ID Name] = ac2. [Идентификатор имени ] И ac. [Начало] = ac2.MaxDate У меня теперь есть ошибка, говорящая мне, что «A & C» не найден ... ПОМОЩЬ! – blindman457

+0

@ blindman457 ... Я не могу с этим поделать. Вы должны использовать правильное имя ваших таблиц для работы любого запроса. Я предлагаю вам начать с более простого запроса, просто чтобы убедиться, что соединение и имена работают. –

Смежные вопросы