我使用DATE的主表来查找日期和其他值,以便控制我的应用程序中的多个事件,间隔和计算。从01/01/1990到12/31/2041,它每天都有行。
我如何使用此查找表的一个示例是:
这是日期查找表的样子:
{ Copyright 1990:2010, Frank Computer, Inc. }
{ DBDATE=YMD4- (correctly sorted for faster lookup) }
CREATE TABLE datemast
(
dm_lookup DATE, {lookup col used for obtaining values below}
dm_workday CHAR(2), {NULL=Normal Working Date,}
{NW=National Holiday(Working Date),}
{NN=National Holiday(Non-Working Date),}
{NH=National Holiday(Half-Day Working Date),}
{CN=Company Proclamated(Non-Working Date),}
{CH=Company Proclamated(Half-Day Working Date)}
{several other columns omitted}
dm_description CHAR(30), {NULL, holiday description or any comments}
dm_day_num SMALLINT, {number of elapsed days since begining of year}
dm_days_left SMALLINT, (number of remaining days until end of year}
dm_plus1_mth DATE, {plus 1 month from lookup date}
dm_plus2_mth DATE, {plus 2 months from lookup date}
dm_plus3_mth DATE, {plus 3 months from lookup date}
dm_fy_begins DATE, {fiscal year begins on for lookup date}
dm_fy_ends DATE, {fiscal year ends on for lookup date}
dm_qtr_begins DATE, {quarter begins on for lookup date}
dm_qtr_ends DATE, {quarter ends on for lookup date}
dm_mth_begins DATE, {month begins on for lookup date}
dm_mth_ends DATE, {month ends on for lookup date}
dm_wk_begins DATE, {week begins on for lookup date}
dm_wk_ends DATE, {week ends on for lookup date}
{several other columns omitted}
)
IN "S:\PAWNSHOP.DBS\DATEMAST";
有更好的方法吗?或者这是一种很酷的方法吗?
答案 0 :(得分:2)
这是一种合理的做事方式。如果你研究data warehousing,你会发现那些系统经常使用类似的时间事实表系统。由于您使用的五十年间行中的行数少于20K,因此数据量不大。
假设存储提供比执行计算更好的性能;因为计算并不那么难(尽管它们都不是微不足道的),并且任何磁盘访问在计算方面都非常慢,所以大多数情况下并不是很明确。但是,将信息放在一个表中的便利性可能足以保证必须跟踪存储在表中的每个计算值的适当方法。
答案 1 :(得分:1)
这取决于您使用的数据库。 SQL Server对时态数据的支持非常糟糕,我几乎总是在那里使用日期事实表。但是像Oracle,Postgres和DB2这样的数据库有很好的支持,而且为OLTP应用程序动态计算日期通常更有效。
例如,Oracle有一个last_day()函数来获取一个月的最后一天,add_months()函数可以添加几个月。通常在Oracle中,我将使用一个流水线函数来获取开始日期和结束日期,并返回一个嵌套的日期表。
答案 2 :(得分:1)
在Oracle中生成日期行集的很酷方法是使用分层查询功能connect by
。我已发布了此用法in another thread的示例。
在没有流水线功能的PL / SQL开销的情况下,它提供了很大的灵活性。
答案 3 :(得分:0)
好的,所以我用31天/月来测试我的应用来计算利率&当铺很满意!当地法律祈祷如下:从典当或最后一个int。 pymt。日期为5天,5%的本金利息,6至10天= 10%,11至15天= 15%,16天至1“月”= 20%。
所以兴趣表现在定义如下:
NUMBER OF ELAPSED DAYS SINCE
PAWN DATE OR LAST INTEREST PYMT
FROM TO ACUMULATED
DAY DAY INTEREST
----- ---- ----------
0 5 5.00%
6 10 10.00%
11 15 15.00%
16 31 20.00%
32 36 25.00%
37 41 30.00%
42 46 35.00%
47 62 40.00%
[... until day 90 (forfeiture allowed)]
from day 91 to 999, daily prorate based on 20%/month.
英国在MAR-13或SEP-1752上发生了什么不好的事情?