Я хочу посчитать для каждого товара в моей таблице количество разных усыновлений, которые происходили каждую неделю, и под разными усыновлениями я подразумеваю количество усыновителей, которые приняли товар впервые. Я написал этот подробный код, и я уверен, что его можно переписать лучше. Спасибо.
conn = sqlite3.connect("prova.db")
conn.execute("""CREATE TABLE IF NOT EXISTS adoptions
(good TEXT NOT NULL,
adopter TEXT NOT NULL,
slot INTEGER NOT NULL,
quantity INTEGER
);""")
conn = sqlite3.connect("prova.db")
conn.execute("""INSERT into adoptions (good, adopter, slot, quantity) VALUES ('%s', '%s', %d, %d)""" %
(0, 4, 0, 9))
conn.execute("""INSERT into adoptions (good, adopter, slot, quantity) VALUES ('%s', '%s', %d, %d)""" %
(0, 5, 0, 10))
conn.execute("""INSERT into adoptions (good, adopter, slot, quantity) VALUES ('%s', '%s', %d, %d)""" %
(0, 4, 1, 2))
conn.commit()
conn.execute('CREATE INDEX IF NOT EXISTS good_idx on adoptions(good)')
conn.execute('CREATE INDEX IF NOT EXISTS adopter_idx on adoptions(adopter)')
conn.execute('CREATE INDEX IF NOT EXISTS slot_idx on adoptions(slot)')
conn.close()
conn = sqlite3.connect("prova.db")
cur = conn.cursor()
cur.execute("""SELECT distinct good from adoptions""")
goods = cur.fetchall()
training_set_start_edge = 0
training_set_end_edge = 1
for good in goods:
good = good[0]
conn = sqlite3.connect("prova.db")
cur = conn.cursor()
cur.execute("""SELECT distinct adopter from adoptions
where (good='%s' AND slot >= '%d' AND slot <= '%d')
""" % (good, training_set_start_edge, training_set_end_edge))
adopters = cur.fetchall()
print(adopters)
for ad in adopters:
ad = ad[0]
conn = sqlite3.connect("prova.db")
cur = conn.cursor()
cur.execute("""SELECT min(slot) from adoptions
where (good='%s' AND adopter = '%s' AND slot >= '%d' AND slot <= '%d')
""" % (good, ad, training_set_start_edge, training_set_end_edge))
ad_min_slot = cur.fetchall()
ad_min_slot = ad_min_slot[0]