微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决Python 查找 mysql 值 1 周、1 个月、ytd 和 1 年

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

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

tblHistory 包含 rDate、rStockID、rPrice 等字段

类似这样的查询,但 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')
;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。