1 Вопрос: Получение минимального значения и даты, в которые оно произошло

вопрос создан в Thu, May 2, 2019 12:00 AM

У меня есть 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
  1. Убедитесь, что поле даты не содержит информацию о времени. Если это так, сгруппируйте по Round([Date]). Заключите Date в скобки, это зарезервированное слово
    2019-05-02 15: 13: 52Z
  2. Спасибо, но это не сработало. То, что я ищу, - это самый низкий баланс для каждой учетной записи, а затем дата или даты, когда баланс был таким низким
    2019-05-02 17: 53: 00Z
  3. 2019-05-02 18: 16: 44Z
  4. Удалить группу по дате. Только группа по аккаунту. Тогда функция MIN может вернуть минимум для этой учетной записи.
    2019-05-06 21: 49: 51Z
1 ответ                              1                         

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

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

    
0
2019-05-02 21: 08: 31Z
источник размещен Вот