Проблема : Рассмотрим банк, который выдает своим пользователям учетные записи с несколькими балансами с истечением срока действия, то есть сумма, зачисленная на ваш счет сегодня, истекает ровно через шесть месяцев. Допустим, вы получили 500 долларов сегодня (2 июня 2018 г.), этот баланс истечет (2 декабря 2018 г.). Теперь рассмотрим следующую таблицу сальдо клиента Tim.
id balance createdAt expiry
001 100 4th November 2017 4th May 2018
002 200 2nd January 2018 2nd July 2018
003 100 10th Feb 2018 10th August 2018
Если пользователь желает потратить 250 на какой-либо продукт сегодня (2 июня 2018 г.), эти 250 единиц следует поэтапно вычесть из всех доступных неистекших остатков, а просроченные строки должны быть очищены.
Поэтому таблица остатков после покупки должна быть
id balance createdAt expiry
003 50 10th Feb 2018 10th August 2018
решение, которое у меня есть
чего я ждуМожно ли реализовать вышеупомянутое решение более разумным способом.
заранее спасибо
Вы можете попробовать это: перебирать каждую строку без сортировки или чего-то еще. Если истекает <сегодня, удалите, иначе вычтите расходы из баланса. Таким образом можно свести к минимуму операции, необходимые для сортировки. Вам не обязательно удалять все просроченные записи.
@VidorVistrom, что было бы несправедливо по отношению к пользователям, которые предположительно должны иметь возможность сначала потратить баллы, ближайшие к истечению срока действия. Вы также почти наверняка не будете просто «удалять» просроченные строки ... необходимо учитывать исчезновение точек.
@SrinivasSunil, если вы отслеживаете очки, просто уменьшая балансы, в конечном итоге у вас возникнет более серьезная проблема. Должна быть таблица транзакций, суммирующих остатки, иначе вы в конечном итоге обнаружите, что затрудняетесь объяснить, как некоторые из балансов достигли своего текущего состояния. Транзакции должны быть правдивыми, а остатки - неавторизованными.
@ Michael-sqlbot, я также веду таблицу транзакций. Все, что я искал, - это лучший способ организовать и работать с этими истекающими остатками. Спасибо






Просто выберите все строки, срок действия которых еще не истек, или по порядку. Срок годности IOW> сегодня. Перебирайте их, обновляя баланс, пока вы не израсходуете потраченную сумму. Игнорируйте те строки, у которых истек срок годности.