Я уже несколько дней стуча головой о стол, и поэтому я обращаюсь к вам, переполнение стека.Сохранение повторяющихся значений в базе данных MySQL
Программное обеспечение, над которым я работаю, имеет чувствительные к времени данные. Обычное решение для этого является эффективным и сроком действия.
EFF_DT XPIR_DT VALUE
2000-05-01 2000-10-31 100
2000-11-01 (null) 90
Это было бы легко. К сожалению, нам требуются данные, которые повторяются на ежегодной основе произвольно далеко в будущее. Другими словами, каждый 1 мая (начиная с 2000 года) нам может потребоваться, чтобы эффективная стоимость составляла 100, и каждый 1 ноября мы можем изменить ее на 90.
Это может случиться в течение длительного времени (> 50 лет), и поэтому я не хочу просто создавать сто записей. I.e., я не хочу этого делать:
EFF_DT XPIR_DT VALUE
2000-05-01 2000-10-31 100
2000-11-01 2001-04-30 90
2001-05-01 2001-10-31 100
2001-11-01 2002-04-30 90
2002-05-01 2002-10-31 100
2002-11-01 2003-04-30 90
...
2049-05-01 2049-10-31 100
2049-11-01 2050-04-30 90
2050-05-01 2050-10-31 100
2050-11-01 2051-04-30 90
Эти значения также могут меняться со временем. Значения до 2000 года могут быть постоянными (не флип-флоп) и значение в ближайшем десятилетии может отличаться от значений для последнего:
EFF_DT XPIR_DT REPEATABLE VALUE
1995-01-01 2000-04-30 false 85
2000-05-01 2010-04-30 true 100
2000-11-01 2010-10-31 true 90
2010-05-01 (null) true 120
2010-11-01 (null) true 115
У нас уже есть текстовый файл (от унаследованного приложения), который хранит данные в форме, очень близкой к этому, поэтому есть преимущества для максимально приближенного к этому типу структуры.
Вопрос тогда приходит к поиску: какое значение применимо к сегодняшнему дню, 2010-03-09?
Кажется, что лучший способ сделать это - найти самый последний экземпляр каждой эффективной даты (всех активных строк), а затем посмотреть, какая из них самая большая.
EFF_DT MOST_RECENT XPIR_DT VALUE
2000-05-01 2009-05-01 2010-04-30 100
2000-11-01 2009-11-01 2010-10-31 90
Стоимость на сегодня будет 90, с 2009-11-01 позже 2009-05-01.
, скажем, 2007-06-20:
EFF_DT MOST_RECENT XPIR_DT VALUE
2000-05-01 2007-05-01 2010-04-30 100
2000-11-01 2006-11-01 2010-10-31 90
значение будет 100, так как 2007-05-01 позднее, чем 2006-11-01.
Использование функций даты MySQL, что является наиболее эффективным способом расчета поля MOST_RECENT
?
Или, может ли кто-нибудь подумать о лучшем способе сделать это?
Язык Java, если это имеет значение. Спасибо всем!
Спасибо ... Я положу в некоторых тестовых данных и дать этому выстрел. Я дам вам знать, как это получается. :-) – Tenner
Я надеялся сделать это в одном хите базы данных - получить все данные, при этом база данных снабдит мой код Java «подсказкой» о том, какую строку использовать. Я думаю, что я собираюсь представить всю вашу логику в базовом коде Java. Есть много умений, которые мне нужно включить в то, что однострочный интерфейс MySQL просто не может (или не должен) обрабатывать. Спасибо за помощь! – Tenner