我使用的是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美元(因为它不是最近的时间而被忽略,因为它不是最近的那个)用于他们的水费,以及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必须唯一的条件,同时还要寻找非独特的产品?
答案 0 :(得分:1)
尝试此查询:
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
,那么他们就无法正确排序,您的桌面会遇到更大的问题。
答案 1 :(得分:0)
请将查询更改为以下内容并重试:
SELECT sum(Charge) FROM billing WHERE ID = " + str(i+1) + " group by id ORDER BY Date DESC