scrapy Mysql SELECT基于唯一产品的TABLE中的最低价格id

qyswt5oh  于 2022-11-09  发布在  Mysql
关注(0)|答案(2)|浏览(110)

我经常抓取产品价格并将其存储在pricehistory表中。
示例表:

id     productid   oldprice    newprice    created_at
20      B0B136KCXP  1571.54 1687.31 2022-09-27 14:38:34
527     B0B136KCXP  1687.31 1598.39 2022-09-27 21:28:04
1317    B0B136KCXP  1598.39 1798.19 2022-09-28 13:51:02
1344    B0B136KCXP  1798.19 1897.10 2022-09-28 14:16:59
1859    B0B136KCXP  1897.10 1587.41 2022-09-28 22:23:39
5894    B0B136KCXP  1587.41 1883.12 2022-09-30 22:22:47
6433    B0B136KCXP  1883.12 1873.13 2022-10-01 09:56:28
9080    B0B136KCXP  1873.13 1883.12 2022-10-03 16:16:43
9256    B0B136KCXP  1883.12 1873.13 2022-10-03 19:54:40
10112   B0B136KCXP  1873.13 1860.13 2022-10-04 07:47:43
10290   B0B136KCXP  1860.13 1798.20 2022-10-04 11:09:52

在此表中,我希望选择productid的最低价格。我将通过电报bot发送此数据作为通知。
我试了几次都没有成功,我想在零碎的pipelines.py文件中执行此操作。
我想选择的内容:
第一个月第三个月第一个月第一个月第一个月第一个月第一个月第一个月第一个月第一个月第一个月第一个月第一个月第一个月第一个月第一个月
提前感谢您的帮助。
我的通知功能:

def sendnotifications(self, token):
        cursor = self.cnx.cursor()
        req = requests
        cursor.execute("SELECT * FROM notificate WHERE token= '"+token+"'")
        notifications = cursor.fetchall()
        for notification in notifications:
            print(notification)
            productid = notification[1]
            url = notification[3]
            name = notification[2]
            old = notification[4]
            new = notification[5]
            price_difference = old - new
            percentage = price_difference / old
            percentage_str = str("%.2f" % (percentage * 100))

        cursor.execute("SELECT p1.productid,p1.oldprice,p1.created_at FROM pricehistory p1 JOIN (SELECT min(oldprice) as minprice,productid FROM pricehistory GROUP BY productid) p2 ON p1.productid=p2.productid and p1.oldprice=p2.minprice")
        pricehistory = cursor.fetchall()
        for history in pricehistory:
            productid = history[0]
            oldprice = history[1]
            created_at = history[2]

            message = "<b>" + name + "</b>" + "\n\n" + \
                str(old) + " TL >>>> " + \
                str(new) + f" TL - <b>{percentage_str}%</b>" + "\n\n" + \
                url + "\n\n" + \
                "Min Price History:" + oldprice + created_at + "\n\n"

            if str(old) == "1.00" or str(old) == "2.00":
                message = "<b>" + name + "</b>" + "\n\n" + \
                    "<b>" + str(new) + " TL\n\n" + "</b>" + \
                    url + "\n\n" + \
                    "Min Price History:" + oldprice + created_at + "\n\n"
9bfwbjaz

9bfwbjaz1#

如果你只是想得到最低的价格,那么你可以使用下面的sql

SELECT min(oldprice),productid FROM pricehistory
GROUP BY productid

如果要将created_at组合在一起,则可以使用下面的sql

SELECT p1.productid,p1.oldprice,p1.created_at FROM pricehistory p1
 JOIN
 (
  SELECT min(oldprice) as minprice,productid FROM pricehistory
  GROUP BY productid 
) p2 ON p1.productid=p2.product_id and p1.oldprice=p2.minprice
eanckbw9

eanckbw92#

SELECT产品ID,旧价格,创建时间_at FROM价格历史记录WHERE旧价格DESC LIMIT 1

相关问题