Получение минимального значения и даты, в которые оно произошло - PullRequest
1 голос
/ 02 мая 2019

у меня 3 столбца

DATE|END OF DAY BALANCE|ACCOUNT

Я хочу получить минимальный баланс, где он меньше нуля, а также дату или даты, когда это произошло.

Приведенный ниже запрос возвращает все даты:

SELECT DISTINCT
       END_OF_DAY_BALANCE.Date,
       MIN(END_OF_DAY_BALANCE.[END OF DAY BALANCE]) AS [MinOfEND OF DAY BALANCE],
       END_OF_DAY_BALANCE.[ACCOUNT]
FROM END_OF_DAY_BALANCE
GROUP BY END_OF_DAY_BALANCE.Date,
         END_OF_DAY_BALANCE.[ACCOUNT]
HAVING(((MIN(END_OF_DAY_BALANCE.[END OF DAY BALANCE])) < 0));

1 Ответ

0 голосов
/ 03 мая 2019

Есть много способов добиться этого -

Ниже приведен один из возможных способов, использующий inner join в подзапросе, который извлекает значение минимального баланса для каждой учетной записи, так что соединение может затем привести ксоответствующие записи из основной таблицы, поля счета и баланса которых совпадают с данными, рассчитанными подзапросом.

select t.*
from
    end_of_day_balance t inner join
    (
        select u.account, min(u.[end of day balance]) as mb
        from end_of_day_balance u
        where u.[end of day balance] < 0
        group by u.account
    ) v on
    t.account = v.account and t.[end of day balance] = v.mb

В качестве альтернативы вы можете использовать коррелированный подзапрос следующим образом:

select t.*
from end_of_day_balance t
where 
    t.[end of day balance] = 
    (
        select min(u.[end of day balance]) 
        from end_of_day_balance u 
        where u.account = t.account and u.[end of day balance] < 0
    )

Здесь подзапрос оценивается для каждой записи, и только те записи, которые содержат минимальные остатки, подтверждают предложение where и, следовательно, возвращаются для каждой учетной записи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...