Python查找mysql的值为1周、1个月、ytd和1年



嗨,我正在开发一个股票投资组合跟踪器。作为这项工作的一部分,我从一个网站上提取了我所有的上市股票,该网站给出了1周、1个月、年初至今和1年的业绩%。我需要单独提取的其他一些投资只给出了当天的当前价格。

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

tbl历史与字段rDate、rStockID、rPrice等字段

查询类似的内容,但varDate1Week是一个近似值,它不会总是有一个";精确";匹配

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

在卢克的帮助下我的样本代码。

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')
;

相关内容

  • 没有找到相关文章

最新更新