确定最接近某个日期inpu的日期的算法

2024-07-04 08:31:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个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. 我必须重复多次(一次是为了构建列表数据,然后是差异列表等等)

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


Tags: 用户in数据库列表forsqldata记录
2条回答

我会尝试直接从数据库中获取一个最大日期小于给定日期的记录(这可以用SQL完成)。(如果你可以把日期放在你的数据库里)。当然,这和“最接近”并不完全相同,但如果你把它与“最小日期比给定日期大”相结合,你就会实现它。在

另外,如果您或多或少了解数据的分布情况,例如,在连续的7天内您有一些数据,那么您可以将数据限制在更小的范围内,比如[-3天,+3天]。在

将这两种解决方案结合起来应该会给您带来非常好的性能。在

在小于输入日期的日期上查询数据库,并取其中的最大值。这会给你最接近的日期。在

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

这些应该是高效的查询。在

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

相关问题 更多 >

    热门问题