나는 지난 며칠 동안 내 책상에 머리를 대고 있었기 때문에 Stack Overflow를 참조하십시오.매년 MySQL 데이터베이스에 반복 가능한 값 저장
제가 작업하고있는 소프트웨어에는 시간에 민감한 데이터가 있습니다. 이를위한 일반적인 해결책은 효과적이고 만료 날짜입니다.
EFF_DT XPIR_DT VALUE
2000-05-01 2000-10-31 100
2000-11-01 (null) 90
이것은 쉽습니다. 불행히도, 우리는 임의로 먼 미래까지 매년 반복되는 데이터가 필요합니다. 다시 말해, 5 월 1 일부터 2000 년에 이르기까지 유효 가치가 100이되기를 원할 수도 있습니다. 11 월 1 일마다 90으로 변경할 수 있습니다.
이것은 오랜 기간 동안 발생할 수 있습니다 (> 50 년), 그래서 나는 단지 100 개의 레코드를 만들고 싶지 않습니다. 즉,이 작업을 수행하고 싶지 않습니다.
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 년 이전 값 (NO 플립 낫다) 일정되었을 수 있습니다와 향후 10에 대한 값은 마지막의 값과 다를 수 있습니다
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
2009-11-01이 2009-05-01 이후이므로 오늘의 값은 90 일 것입니다.
에는, 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
값은 2007-05-01부터 100 나중에 2006-11-01보다 것이다.
MySQL 날짜 함수를 사용하면 MOST_RECENT
필드를 계산하는 가장 효율적인 방법은 무엇입니까?
아니면 누구나 더 좋은 방법을 생각할 수 있습니까?
중요한 언어는 Java입니다. 모두에게 감사드립니다!
감사합니다 ... 나는 몇 가지 테스트 데이터에 넣고이 주사를 수 있습니다. 어떻게되는지 알려 드리겠습니다. :-) – Tenner
나는 하나의 데이터베이스 히트에서 이것을 수행하기를 바랬다. 데이터베이스에서 모든 Java 코드를 "힌트"로 사용하여 모든 데이터를 검색했다. 기본 Java 코드에서 모든 논리를 소개 할 것입니다. MySQL one-liner가 처리 할 수없는 (또는 처리해서는 안되는) 많은 지혜가 필요합니다. 도움 주셔서 감사합니다. – Tenner