Python 查找 mysql 值 1 周、1 个月、年初至今和 1 年

Python lookup mysql for value 1 week, 1 month, ytd and 1 year

您好,我正在开发一个股票投资组合追踪器。作为其中的一部分,我从一个网站上提取了我所有上市的股票,该网站给出了 1 周、1 个月、年初至今和 1 年的表现百分比。我需要单独提取数据的其他一些投资只给出了当天的当前价格。

我正在使用 python(目前是 pymysql 库)将所有数据存储在 mysql 数据库中。我想知道的是如何查找不同时间段的值。我知道如何只查找 1 周等。但是有时在特定的一天没有数据,我只需要获取最近的记录或上一个或下一个记录(不是那么挑剔)。

包含 rDate、rStockID、rPrice 等字段的 tblHistory

像这样查询,但 varDate1Week 是一个近似值,并不总是具有“精确”匹配

"SELECT rPrice FROM tblHistory WHERE (rStockID = " + str(varStockID) + " AND rDate = " + varDate1Week + ")"

在 Luuk 的帮助下我的示例代码。

import datetime
import pymysql
db = pymysql.connect(host='localhost',user='Test',password='TestPassword',database='dbInvest')
varrDate2 = datetime.datetime.now().strftime("%Y-%m-%d")
cursor2 = db.cursor(pymysql.cursors.DictCursor)
sqllookup = "SELECT rPrice FROM tblHistory WHERE rStockID = 7 and rDate >= DATE_ADD('2021-06-20', INTERVAL - 7 DAY) ORDER BY rDATE LIMIT 1"
cursor2.execute(sqllookup)
Perform1WeekList = cursor2.fetchall()
print ("1 Week Value is " + str(Perform1WeekList[0]))
cursor2.close

我从这里得到的输出是

1 Week Value is {'ClosePrice': Decimal('86.7400')}

希望能够使用变量 varrDate2 代替硬编码日期。还要有干净的输出(即 86.7400)。我可以通过拆分然后替换字符串来完成,但肯定有更好的方法。

在MySQL你可以做:

SELECT 
   t1.rPrice,
   (SELECT t2.rPrice 
    FROM tblHistory  t2 
    WHERE t2.rStockID = t1.rStockID 
      and t2.rDate <= DATE_ADD(t1.rDate,INTERVAL -7 DAY)
    ORDER BY r2.rDate DESC
    LIMIT 1) "1weekago" 
   (SELECT t3.rPrice 
    FROM tblHistory  t3
    WHERE t3.rStockID = t1.rStockID 
      and t3.rDate <= DATE_ADD(t1.rDate,INTERVAL -30 DAY)
    ORDER BY r3.rDate DESC
    LIMIT 1) "30daysago" 
FROM tblHistory  t1
WHERE (t1.rStockID = 1 AND t1.rDate = '2021-06-19')
;