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