嗨,我正在开发一个股票投资组合跟踪器。作为这项工作的一部分,我从一个网站上提取了我所有的上市股票,该网站给出了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')
;