我有一个 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
但是,这在内存方面花费了我两件事:
- 我需要加载所有的数据库,它很大;
- 我必须迭代很多次(一次是构建列表数据,然后是差异列表等)
有没有人有更好的想法来构建这个,或者知道解决这个问题的不同方法?
最佳答案
查询数据库中小于输入日期的日期,并取其中的最大值。这将为您提供最接近的日期。
对称地,您可以查询较大日期中的最小日期以获得最接近的日期。并保留两者中的首选。
这些应该是高效的查询。
SELECT MAX(Date)
FROM MyDates
WHERE Date <= InputDate;
关于python - 确定最接近某个日期输入的日期的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22246677/