我正在尝试在python中找到常见事件。 我已设法进行查询,但必须有更好的方法,你能评论一下吗?
Id date event
31 2016-10-05 1
44 2016-10-07 1
32 2016-10-05 2
36 2016-10-06 2
45 2016-10-07 2
33 2016-10-05 3
41 2016-10-07 3
34 2016-10-05 4
37 2016-10-06 4
43 2016-10-07 4
35 2016-10-05 5
38 2016-10-06 6
42 2016-10-07 6
39 2016-10-06 8
40 2016-10-06 10
此查询执行Thing:
select A.event as nA, B.event as nB, C.event as nC, count(C.event) as count
from event as A, event as B, event as C
where A.date = B.date
and B.date=C.date
and nA=1
and nB=2
and nC<>nA
and nC<>nB
group by (nC)
结果:
nA nB Nc count
1 2 5 1
1 2 6 1
1 2 3 2
1 2 4 2
但是在python中我的代码和以下一样糟糕:
(这是一个施加)
b1 = event1
b2 = event2
b3 = event3
q1 = (events.objects.filter(event=b1))
for r1 in q1: #q1 contains all dates for event1
d1 = r1.dates
q2 = (events.objects.filter(dates=d1).filter(event=b2))
for r2 in q2: #q2 contains all comun dates
d2 = r2.dates
q3 = (events.objects.filter(dates=d2).filter(event=b3))
for r3 in q3: #q3 contains all common dates
d3 = r3.dates
tmp = events.objects.filter(dates=d3).values('event').exclude(event=b2).exclude(
event=b1).exclude(event=b3) #events on common dates
for t in tmp: # makes da count, and formats to dic format
if t.get('event') in eventList:
eventList[t.get('event')] += 1
else:
eventList[t.get('event')] = 1
模特:
class events(models.Model):
event = models.PositiveSmallIntegerField(primary_key=False)
date = models.DateField(auto_now=False, auto_now_add=False)
在SQLite中创建的表构造 -
PRAGMA foreign_keys = off;
BEGIN TRANSACTION;
-- Table: event
CREATE TABLE event (id integer NOT NULL PRIMARY KEY AUTOINCREMENT, date date NOT NULL, event smallint unsigned NOT NULL);
INSERT INTO event (id, date, event) VALUES (31, '2016-10-05', 1);
INSERT INTO event (id, date, event) VALUES (32, '2016-10-05', 2);
INSERT INTO event (id, date, event) VALUES (33, '2016-10-05', 3);
INSERT INTO event (id, date, event) VALUES (34, '2016-10-05', 4);
INSERT INTO event (id, date, event) VALUES (35, '2016-10-05', 5);
INSERT INTO event (id, date, event) VALUES (36, '2016-10-06', 2);
INSERT INTO event (id, date, event) VALUES (37, '2016-10-06', 4);
INSERT INTO event (id, date, event) VALUES (38, '2016-10-06', 6);
INSERT INTO event (id, date, event) VALUES (39, '2016-10-06', 8);
INSERT INTO event (id, date, event) VALUES (40, '2016-10-06', 10);
INSERT INTO event (id, date, event) VALUES (41, '2016-10-07', 3);
INSERT INTO event (id, date, event) VALUES (42, '2016-10-07', 6);
INSERT INTO event (id, date, event) VALUES (43, '2016-10-07', 4);
INSERT INTO event (id, date, event) VALUES (44, '2016-10-07', 1);
INSERT INTO event (id, date, event) VALUES (45, '2016-10-07', 2);
COMMIT TRANSACTION;
PRAGMA foreign_keys = on;
感谢;