Вот одно решение (для sqlserver, msaccess sql еще ниже) - что должно произойти, когда дата равна сегодняшнему дню?
-- for testing, declare table and insert some date into it
declare @Jobs table (JID int, UID int, Jtitle varchar(50), aDate datetime);
insert into @Jobs values (1, 1, 'PenTest', '12Aug2019');
insert into @Jobs values (2, 1, 'Consult', '15Nov2019');
insert into @Jobs values (3, 2, 'VulScan', '05Sep2019');
insert into @Jobs values (4, 2, 'PenTest', '15Sep2019');
insert into @Jobs values (5, 1, 'PenTest', '30Dec2019');
insert into @Jobs values (6, 2, 'PenTest', '13Oct2019');
insert into @Jobs values (7, 3, 'VulScan', '10Nov2019');
-- FULL Join the max(Past) and the min(Future) and convert the dates.
Select
COALESCE(a.UID, b.UID) as UID,
Left(Convert(varchar, Past, 106), 6) as Past,
LEFT(Convert(varchar, Future, 106), 6) as Future,
DATEDIFF(day, Past, Future) as Difference
FROM
(Select UID, Max(aDate) as Past from @Jobs where aDate <= GETDATE() Group By UID)a
FULL JOIN
(Select UID, Min(aDate) as Future from @Jobs where aDate > GETDATE() Group By UID) b
ON a.UID = B.UID
Результаты: -
UID Past Future Difference
1 12 Aug 15 Nov 95
2 13 Oct NULL NULL
3 NULL 10 Nov NULL
SQLдля MSACCESS использует объединение левого и правого объединений для получения одинаковых результатов -
Select
NZ(a.UID, b.UID) as UID,
format( aPast, "ddMMM") as Past,
format( aFuture, "ddMMM") as Future,
DATEDIFF("d", aPast, aFuture) as Difference
FROM
(Select UID, Max(aDate) as aPast from Jobs where aDate <= DATE() Group By UID)a
LEFT JOIN
(Select UID, Min(aDate) as aFuture from Jobs where aDate > DATE() Group By UID) b
ON a.UID = B.UID
UNION
Select
NZ(a.UID, b.UID) as UID,
format( aPast, "ddMMM") as Past,
format( aFuture, "ddMMM") as Future,
DATEDIFF("d", aPast, aFuture) as Difference
FROM
(Select UID, Max(aDate) as aPast from Jobs where aDate <= DATE() Group By UID)a
RIGHT JOIN
(Select UID, Min(aDate) as aFuture from Jobs where aDate > DATE() Group By UID) b
ON a.UID = B.UID
Чтобы получить также Uname, просто оберните вышеприведенное как подвыбор и объедините его с пользователем. Мне пришлось конвертировать в Integer (Cint) UID, чтобы он работал.
SELECT u.Uname, z.*
FROM (
Select
NZ(a.UID, b.UID) as UID,
format( aPast, "ddMMM") as Past,
format( aFuture, "ddMMM") as Future,
DATEDIFF("d", aPast, aFuture) as Difference
FROM
(Select UID, Max(aDate) as aPast from Jobs where aDate <= DATE() Group By UID)a
LEFT JOIN
(Select UID, Min(aDate) as aFuture from Jobs where aDate > DATE() Group By UID) b
ON a.UID = B.UID
UNION
Select
NZ(a.UID, b.UID) as UID,
format( aPast, "ddMMM") as Past,
format( aFuture, "ddMMM") as Future,
DATEDIFF("d", aPast, aFuture) as Difference
FROM
(Select UID, Max(aDate) as aPast from Jobs where aDate <= DATE() Group By UID)a
RIGHT JOIN
(Select UID, Min(aDate) as aFuture from Jobs where aDate > DATE() Group By UID) b
ON a.UID = B.UID
) as z
Left Join [User] as u
On cint(z.UID) = cint(u.UID)
Я живу между Оклендом и Беркли, и у нас есть много местных пивных баров.