我有一个Python程序,它使用来自数据库的历史数据,允许用户选择输入的日期。然而,并非所有可能的日期都能进入数据库,因为这些是财务数据:换句话说,如果用户插入“02/03/2014”(星期日),他将不会在数据库中找到任何记录,因为证券交易所已经关闭。在
这会导致SQL问题,因为当找不到记录时,SQL语句将失败,用户需要调整日期,直到找到现有记录为止。为了避免这种情况,我想建立一个算法,能够改变日期输入本身选择最接近原始输入。例如,如果用户插入“02/03/2014”,则最接近的将是03/03/2014。在
我曾想过这样的事情,其中表MyData只包含日期值(我仍在研究正确的语法,但这只是为了展示想法):
con = lite.connect('C:/.../MyDatabase.db')
cur = con.cursor()
cur.execute('SELECT * from MyDates')
rowsD= cur.fetchall()
data = []
for row in rowsD:
data.append(rowsD[row])
>>>data
['01/01/2010', '02/01/2010', .... '31/12/2013']
inputDate = '07/01/2010'
differences = []
for i in range(0, len(data)):
differences.append(abs(data[i] - inputDate))
在那之后,我在想:
mV = min(differences)
data
无论如何,这让我损失了两样东西:
有没有人有更好的想法来构建这个问题,或者知道一个不同的方法来解决这个问题?在
我会尝试直接从数据库中获取一个最大日期小于给定日期的记录(这可以用SQL完成)。(如果你可以把日期放在你的数据库里)。当然,这和“最接近”并不完全相同,但如果你把它与“最小日期比给定日期大”相结合,你就会实现它。在
另外,如果您或多或少了解数据的分布情况,例如,在连续的7天内您有一些数据,那么您可以将数据限制在更小的范围内,比如[-3天,+3天]。在
将这两种解决方案结合起来应该会给您带来非常好的性能。在
在小于输入日期的日期上查询数据库,并取其中的最大值。这会给你最接近的日期。在
对称地,您可以查询较大日期中的最小值,以获得最接近的日期。保留两人中的首选。在
这些应该是高效的查询。在
相关问题 更多 >
编程相关推荐