gpt4 book ai didi

python - 在存在条件的数据库中查找非唯一值

转载 作者:太空宇宙 更新时间:2023-11-03 13:56:08 25 4
gpt4 key购买 nike

我正在使用 SQLite 服务器,但我不知道如何实现我的目标。

我有一个名为 billing 的数据库,如下所示:

+------------+---------+-------+---------+--------+
| ID | Account | Date | Product | Charge |
+------------+---------+-------+---------+--------+
| 1 | 1 | 04-01 | Water | 20 |
| 1 | 1 | 04-02 | Water | 20 |
| 2 | 2 | 06-01 | Phone | 30 |
| 2 | 3 | 08-04 | Water | 40 |
+------------+---------+-------+---------+--------+

我正在尝试查找所有产品组合的所有最新费用的总和。这意味着,我必须将 ID-1 的水费账单总计 20 美元(日期为 04-01 的账单被忽略,因为它不是最新的),而 ID-2 的水费和电话账单则总计 30 美元和 40 美元。

现在,我正在使用 Python 的 sqlite3 模块,并且正在使用:

for i in range (2):
c.execute("SELECT Charge FROM billing WHERE ID = " + str(i+1) + " ORDER BY Date DESC")
rows = c.fetchone()
sum.x += rows[0]
print("Todays Sum = $" + str(sum.x))

但是使用这种方法只会计算 ID-2 中的一个值。由于数据库正在下降,因此不计算最近的一个。

如何应用 ID 必须唯一的标准,同时还要查找非唯一的产品?

最佳答案

尝试这个查询:

SELECT SUM(b1.Charge)
FROM billing b1
INNER JOIN
(
SELECT Account, Product, MAX(Date) AS max_date
FROM billing
GROUP BY Account, Product
) b2
ON b1.Account = b2.Account AND
b1.Product = b2.Product AND
b1.Date = b2.max_date;

这里的一个关键假设是您的日期以 YY-MM 格式存储。如果您将它们存储为 MM-YY,那么它们将无法正确排序,并且您的表格会遇到更大的问题。

关于python - 在存在条件的数据库中查找非唯一值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49595848/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com