在過去的幾天裏,我一直在用錘子敲着我的桌子,因此我轉向了你,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年),所以我不想創建一百個記錄。即,我不想這樣做:
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