Вы просто должны были найти первые и последние даты.В любом случае:
Сначала найдите минимальную и максимальную даты:
SELECT
Account,
Min(tblProvider.[Entry Date]) AS FirstDate,
Max(tblProvider.[Entry Date]) AS LastDate
FROM
Test
GROUP BY
Account;
Сохраните это как qDateMinMax .
Затем создайте запрос фактора:
SELECT DISTINCT
[Thousands]+[Hundreds]+[Tens]+[Ones] AS Factor,
1000*Abs([Mille].[id] Mod 10) AS Thousands,
100*Abs([Centa].[id] Mod 10) AS Hundreds,
10*Abs([Deca].[id] Mod 10) AS Tens,
Abs([Uno].[id] Mod 10) AS Ones
FROM
MSysObjects AS Uno,
MSysObjects AS Deca,
MSysObjects AS Centa,
MSysObjects AS Mille;
Сохраните это как qdxFactor .
Теперь соберите их:
SELECT
qDateMinMax.Account,
qDateMinMax.FirstDate,
qDateMinMax.LastDate,
DateAdd("d",[Factor],[FirstDate]) AS OtherDate,
(Select Last(Amount)
From Test
Where Test.Account = qDateMinMax.Account
And Test.[Entry Date] = qDateMinMax.LastDate) As LastAmount
FROM
qDateMinMax,
qdxFactor
WHERE
DateAdd("d",[Factor],[FirstDate]) <= [LastDate]
ORDER BY
qDateMinMax.Account,
DateAdd("d",[Factor],[FirstDate]);
Для медиана :
SELECT
qDateMinMax.Account,
qDateMinMax.FirstDate,
qDateMinMax.LastDate,
DateAdd("d",[Factor],[FirstDate]) AS OtherDate,
(Select (Min(Amount) + Max(Amount)) / 2
From Test
Where Test.Client = qDateMinMax.Account
And Test.[Entry Date] Between qDateMinMax.FirstDate And qDateMinMax.LastDate) AS MedAmount
FROM
qDateMinMax,
qdxFactor
WHERE
DateAdd("d",[Factor],[FirstDate]) <= [LastDate]
ORDER BY
qDateMinMax.Account,
DateAdd("d",[Factor],[FirstDate]);
Для группировки по году-месяцу:
SELECT DISTINCT
qDateMinMax.Account,
Format([FirstDate],"yyyymm") AS FirstYM,
Format([LastDate],"yyyymm") AS LastYM,
Format(DateAdd("d",[Factor],[FirstDate]),"yyyymm") AS YM,
(Select (Min(Amount) + Max(Amount)) / 2
From Test
Where Test.Client = qDateMinMax.Account
And Test.[Entry Date] Between qDateMinMax.FirstDate And qDateMinMax.LastDate) AS MedAmount
FROM
qDateMinMax,
qdxFactor
WHERE
DateAdd("d",[Factor],[FirstDate]) <= [LastDate];
Для включения последней суммы:
SELECT DISTINCT
qDateMinMax.Account,
Format([FirstDate],"yyyymm") AS FirstYM,
Format([LastDate],"yyyymm") AS LastYM,
Format(DateAdd("d",[Factor],[FirstDate]),"yyyymm") AS YM,
(Select (Min(Amount) + Max(Amount)) / 2
From Test
Where Test.Client = qDateMinMax.Account
And Test.[Entry Date] Between qDateMinMax.FirstDate And qDateMinMax.LastDate) AS MedAmount,
(Select Amount
From Test
Where Test.Client = qDateMinMax.Account
And Test.[Entry Date] =LastDate) AS LastAmount
FROM
qDateMinMax,
qdxFactor
WHERE
DateAdd("d",[Factor],[FirstDate] <= [LastDate];