python - 确定最接近某个日期输入的日期的算法

标签 python algorithm

我有一个 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

但是,这在内存方面花费了我两件事:

  1. 我需要加载所有的数据库,它很大;
  2. 我必须迭代很多次(一次是构建列表数据,然后是差异列表等)

有没有人有更好的想法来构建这个,或者知道解决这个问题的不同方法?

最佳答案

查询数据库中小于输入日期的日期,并取其中的最大值。这将为您提供最接近的日期。

对称地,您可以查询较大日期中的最小日期以获得最接近的日期。并保留两者中的首选。

这些应该是高效的查询。

SELECT MAX(Date)
FROM MyDates
WHERE Date <= InputDate;

关于python - 确定最接近某个日期输入的日期的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22246677/

相关文章:

python - 如何将一个字符串散列成 8 位数字?

python - "python Requests library"的区域设置问题,如何指定具有特定区域设置的请求?

python - 如何通过特定的字符串元素将字符串列表拆分为字符串子列表

algorithm - 使用 FFT 和 IFFT 计算 (x^2 + 1)^3

python - 如何获得这个组合列表?

java - 图像旋转代码有什么问题?

algorithm - 有没有办法在没有根节点引用的情况下删除二叉树中的任何节点?

python - ctypes:如何正确更新指针?

python - 如何在 Python 中将代理对转换为普通字符串?

python - 将类实例序列化为 JSON