Есть ли в SQL метод для захвата первых n строк, упорядоченных по дате, PER ID (не только первые n сверху) - PullRequest
1 голос
/ 09 июля 2019

У меня есть серия записей о платежах в базе данных. Мне нужны только первые n записей FOR EACH id, сумма которых не превышает другую переменную столбца (начальный счет) для каждого идентификатора.

select * 
FROM db.paymentrecords
Order by PaymentDate;

Является ли индексирование правильным способом борьбы с этим? Я не уверен, как указать MYSQL, чтобы получать только первые n записей из каждой группы (каждая группа - это просто все платежи для каждого идентификатора).

Идея состоит в том, чтобы выяснить, сколько было оплачено по накладной в любое время.

возможно что-то вроде

WHERE sum(first n records in each grouping < aggregate invoice amount)

Я чувствую, что это должно быть просто, и все же я не уверен, как сделать это логически с SQL. Будем очень благодарны любой помощи. Спасибо, ребята!

Редактировать ** Так что, на мой взгляд, в sql все оказалось слишком сложно, мы переключились и сделали это программно, используя python для выполнения необходимой нам логики. Я до сих пор не уверен, как сделать это в SQL с индексированием каждой группы записей? Спасибо за всю помощь, ребята!

1 Ответ

3 голосов
/ 09 июля 2019

В MySQL 8+ вы можете использовать оконные функции:

select pr.*,
       sum(amount) over (partition by id order by paymentdate) as running_amount
from db.paymentrecords pr;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...