View difference between Paste ID: Y4p9EX6A and M72mNPcx
SHOW: | | - or go back to the newest paste.
1-
-DROP TABLE Replies; DROP TABLE emails;
1+
--DROP TABLE Replies; DROP TABLE emails;
2
3
CREATE TABLE emails
4
(
5
  id serial NOT NULL,
6
  subject text,
7
  created_at timestamp without time zone,
8
  folder text,
9
  message_id text,
10
  CONSTRAINT emails_pkey PRIMARY KEY (id)
11
)
12
WITH (
13
  OIDS=FALSE
14
);
15
16
-- Index: emails_message_id_index
17
18
-- DROP INDEX emails_message_id_index;
19
20
CREATE INDEX emails_message_id_index
21
  ON emails
22
  USING btree
23
  (message_id COLLATE pg_catalog."default");
24
25
-- NOT IN THREAD
26
27
INSERT INTO emails(
28
    subject, created_at, folder,  message_id)
29
    VALUES ('Not part of thread', (NOW() - INTERVAL '100 MINUTE'), 'INBOX', 'CAEBV8YRGwkNSb3cxquS5abSCmnwLn37GxCpg74mQe7=3SC5cdQ@mail.gmail.com');
30
31
--THREAD 1 EMAILS
32
33
 INSERT INTO emails(
34
    subject, created_at, folder, message_id)
35
    VALUES ('howzitgoin', (NOW() - INTERVAL '90 MINUTE'), null, '53856b1448c89_23fa9605badd015951@3a139e8c-0b81-42c2-8e59-133c262e96a9.mail');
36
37
INSERT INTO emails(
38
    subject, created_at, folder, message_id)
39
    VALUES ('Re: howzitgoin', (NOW() - INTERVAL '80 MINUTE'), 'INBOX', 'CAEBV8YTu_A6LtP_uGuQ-QSVj3zojWUiwcjGZpsPPEz1Pj3_i1A@mail.gmail.com');
40
41
 INSERT INTO emails(
42
    subject, created_at, folder, message_id)
43
    VALUES ('Re: howzitgoin', (NOW() - INTERVAL '70 MINUTE'), 'INBOX', '53856b88a2a09_23fa9605badd01601b@3a139e8c-0b81-42c2-8e59-133c262e96a9.mail');
44
45
INSERT INTO emails(
46
    subject, created_at, folder, message_id)
47
    VALUES ('Re: howzitgoin', (NOW() - INTERVAL '60 MINUTE'), 'INBOX', 'CAEBV8YT6vx6buOKUga4f=bcNGq_=WzwiqEzm2FWm3HoLZ8SbJA@mail.gmail.com');
48
49
INSERT INTO emails(
50
    subject, created_at, folder,  message_id)
51
    VALUES ('Re: howzitgoin', (NOW() - INTERVAL '50 MINUTE'), 'INBOX', 'CAEBV8YRGwkNSb3cxquS5abSCmnwLn37GxCpg74mQe7=3SC5cdQ@mail.gmail.com');
52
53
-- THREAD 2 EMAILS
54
55
INSERT INTO emails(
56
    subject, created_at, folder,  message_id)
57
    VALUES ('thready mercury', (NOW() - INTERVAL '40 MINUTE'), 'INBOX', '[email protected]');
58
59
 INSERT INTO emails(
60
    subject, created_at, folder,  message_id)
61
    VALUES ('RE: thready mercury', (NOW() - INTERVAL '30 MINUTE'), null, '5386c3c3f364d_23ff44def2de8849cf@55cedd07-f558-4cc4-b5d2-046dc7642b91.mail');
62
63
 INSERT INTO emails(
64
    subject, created_at, folder,  message_id)
65
    VALUES ('RE: thready mercury', (NOW() - INTERVAL '20 MINUTE'), 'INBOX', '[email protected]');
66
67
-- Table: replies
68
69
-- DROP TABLE replies;
70
71
CREATE TABLE replies
72
(
73
  id serial NOT NULL,
74
  message_id text,
75
  created_at timestamp without time zone,
76
  email_id integer NOT NULL,
77
  CONSTRAINT replies_pkey PRIMARY KEY (id),
78
  CONSTRAINT replies_email_id_fkey FOREIGN KEY (email_id)
79
      REFERENCES emails (id) MATCH SIMPLE
80
      ON UPDATE NO ACTION ON DELETE CASCADE
81
)
82
WITH (
83
  OIDS=FALSE
84
);
85
86
87
-- Index: replies_email_id_index
88
89
-- DROP INDEX replies_email_id_index;
90
91
CREATE INDEX replies_email_id_index
92
  ON replies
93
  USING btree
94
  (email_id);
95
96
-- Index: replies_message_id_index
97
98
-- DROP INDEX replies_message_id_index;
99
100
CREATE INDEX replies_message_id_index
101
  ON replies
102
  USING btree
103
  (message_id COLLATE pg_catalog."default");
104
105
-- THREAD 1 REPLIES
106
107
INSERT INTO replies(message_id, created_at, email_id)
108-
            VALUES ('53856b1448c89_23fa9605badd015951@3a139e8c-0b81-42c2-8e59-133c262e96a9.mail', now(), 2);
108+
            VALUES ('53856b1448c89_23fa9605badd015951@3a139e8c-0b81-42c2-8e59-133c262e96a9.mail', (NOW() - INTERVAL '85 MINUTE'), 2);
109
110
INSERT INTO replies(message_id, created_at, email_id)
111-
            VALUES ('53856b1448c89_23fa9605badd015951@3a139e8c-0b81-42c2-8e59-133c262e96a9.mail', now(), 3);
111+
            VALUES ('53856b1448c89_23fa9605badd015951@3a139e8c-0b81-42c2-8e59-133c262e96a9.mail', (NOW() - INTERVAL '75 MINUTE'), 3);
112
113
INSERT INTO replies(message_id, created_at, email_id)
114-
            VALUES ('CAEBV8YTu_A6LtP_uGuQ-QSVj3zojWUiwcjGZpsPPEz1Pj3_i1A@mail.gmail.com', now(), 3);
114+
            VALUES ('CAEBV8YTu_A6LtP_uGuQ-QSVj3zojWUiwcjGZpsPPEz1Pj3_i1A@mail.gmail.com', (NOW() - INTERVAL '75 MINUTE'), 3);
115
116
INSERT INTO replies(message_id, created_at, email_id)
117-
            VALUES ('53856b88a2a09_23fa9605badd01601b@3a139e8c-0b81-42c2-8e59-133c262e96a9.mail', now(), 4);
117+
            VALUES ('53856b88a2a09_23fa9605badd01601b@3a139e8c-0b81-42c2-8e59-133c262e96a9.mail', (NOW() - INTERVAL '65 MINUTE'), 4);
118
119
INSERT INTO replies(message_id, created_at, email_id)
120-
            VALUES ('CAEBV8YTu_A6LtP_uGuQ-QSVj3zojWUiwcjGZpsPPEz1Pj3_i1A@mail.gmail.com', now(), 4);
120+
            VALUES ('CAEBV8YTu_A6LtP_uGuQ-QSVj3zojWUiwcjGZpsPPEz1Pj3_i1A@mail.gmail.com', (NOW() - INTERVAL '65 MINUTE'), 4);
121
122
INSERT INTO replies(message_id, created_at, email_id)
123-
            VALUES ('53856b1448c89_23fa9605badd015951@3a139e8c-0b81-42c2-8e59-133c262e96a9.mail', now(), 4);
123+
            VALUES ('53856b1448c89_23fa9605badd015951@3a139e8c-0b81-42c2-8e59-133c262e96a9.mail', (NOW() - INTERVAL '65 MINUTE'), 4);
124
125
INSERT INTO replies(message_id, created_at, email_id)
126-
            VALUES ('53856b88a2a09_23fa9605badd01601b@3a139e8c-0b81-42c2-8e59-133c262e96a9.mail', now(), 5);
126+
            VALUES ('53856b88a2a09_23fa9605badd01601b@3a139e8c-0b81-42c2-8e59-133c262e96a9.mail', (NOW() - INTERVAL '55 MINUTE'), 5);
127
128
INSERT INTO replies(message_id, created_at, email_id)
129-
            VALUES ('CAEBV8YTu_A6LtP_uGuQ-QSVj3zojWUiwcjGZpsPPEz1Pj3_i1A@mail.gmail.com', now(), 5);
129+
            VALUES ('CAEBV8YTu_A6LtP_uGuQ-QSVj3zojWUiwcjGZpsPPEz1Pj3_i1A@mail.gmail.com', (NOW() - INTERVAL '55 MINUTE'), 5);
130
131
INSERT INTO replies(message_id, created_at, email_id)
132-
            VALUES ('53856b1448c89_23fa9605badd015951@3a139e8c-0b81-42c2-8e59-133c262e96a9.mail', now(), 5);
132+
            VALUES ('53856b1448c89_23fa9605badd015951@3a139e8c-0b81-42c2-8e59-133c262e96a9.mail', (NOW() - INTERVAL '55 MINUTE'), 5);
133
134
-- THREAD 2 REPLIES
135
136
137
INSERT INTO replies(message_id, created_at, email_id)
138-
            VALUES ('[email protected]', now(), 8);
138+
            VALUES ('[email protected]', (NOW() - INTERVAL '45 MINUTE'), 8);
139
140
INSERT INTO replies(message_id, created_at, email_id)
141-
            VALUES ('5386c3c3f364d_23ff44def2de8849cf@55cedd07-f558-4cc4-b5d2-046dc7642b91.mail', now(), 9);
141+
            VALUES ('5386c3c3f364d_23ff44def2de8849cf@55cedd07-f558-4cc4-b5d2-046dc7642b91.mail', (NOW() - INTERVAL '35 MINUTE'), 9);
142
143
INSERT INTO replies(message_id, created_at, email_id)
144-
            VALUES ('[email protected]', now(), 9);
144+
            VALUES ('[email protected]', (NOW() - INTERVAL '35 MINUTE'), 9);
145
146
--- my attempt which does not work
147-
-- MY FAILED ATTEMPT
147+
SELECT  "emails".id, subject, "count", "emails".created_at
148-
SELECT  "emails".id, subject, "emails".created_at, "count"
148+
149
LEFT JOIN 
150
(
151
	SELECT "email_id", count(*) AS "count" FROM "replies" GROUP BY "email_id"
152
) AS "r" 
153
ON ("emails"."id" = "r"."email_id") 
154
WHERE (("folder" = 'INBOX') 
155
  --AND ("emails"."id" NOT IN (SELECT "email_id" FROM "replies"))
156
) ORDER BY "created_at" DESC LIMIT 7 OFFSET 0;
157
158
159
--EXPECTED OUTPUT
160
-----------------------------------------------------------
161
-- ID | SUBJECT             | COUNT
162
-- =========================================================
163
-- 9  | RE: thready mercury | 3
164-
-- 9  | RE: howzitgoin      | 4
164+
-- 6  | RE: howzitgoin      | 4
165-
-- 9  | Not part of thread  | (null)
165+
-- 1  | Not part of thread  | (null)