Спасибо за ваше время! Для каждого пользователя я хочу вывести один столбец, который содержит их самую раннюю дату вступления в силу и последнюю дату окончания, а также другие столбцы из этой и других таблиц (этот материал согласован для каждого пользователя). Ниже приведен формат входных данных.
User Eff_Date End_Date Otherstuff...
----|-------------|------------|---------
001 | 20140101 | 20140106
001 | 20140107 | 99990101
002 | 20140201 | 20140305
002 | 20140306 | 20140319
002 | 20140320 | 99990101
003 | 20140401 | 20140402
004 | 20140501 | 20250901
Это в основном то, что я бы предпочел в результате:
User Eff_Date End_Date Otherstuff...
----|-------------|------------|---------
001 | 20140101 | 99990101
002 | 20140201 | 99990101
003 | 20140401 | 20140402
004 | 20140501 | 20250901
Вот что я пробовал:
SELECT DISTINCT M.user, T.mineffdate, T.maxenddate, A.otherstuff
FROM tbluser M
LEFT JOIN otherstuff A ON A.[user]=M.[user]
INNER JOIN (SELECT user, MAX(m.end_date) as maxenddate, MIN(m.eff_date) as mineffdate FROM tbluser M GROUP BY user) T ON T.user = M.user AND T.maxenddate = m.end_date AND T.mineffdate = M.eff_date
Когда я запустил это, пользователи, такие как 003 и 004 выше, появлялись нормально, но пользователи, такие как 001 и 002, вообще не отображались.
Я довольно новичок в SQL, поэтому я могу сделать очень простую ошибку. Не стесняйтесь, дайте мне знать, если это так. Кроме того, у меня нет контроля над источником данных, поэтому я не могу исправить это в источнике. Единственная причина, по которой я узнал об этом, заключалась в том, что я использовал SQL для вывода каждой пользовательской записи, а затем использовал VBA для сборки записей. К сожалению, это не долгосрочное решение.
Пожалуйста, дайте мне знать, если вам нужна дополнительная информация, и я ценю все, толчка в правильном направлении может быть достаточно, чтобы помочь мне решить эту проблему. Еще раз спасибо за ваше время!