View difference between Paste ID: M72mNPcx and 697EfFMQ
SHOW: | | - or go back to the newest paste.
1-
--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-
  updated_at timestamp without time zone,
8+
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-
    subject, created_at, updated_at, folder, message_id)
27+
28-
    VALUES ('howzitgoin', now(), now(), null, '53856b1448c89_23fa9605badd015951@3a139e8c-0b81-42c2-8e59-133c262e96a9.mail');
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-
    subject, created_at, updated_at, folder, message_id)
31+
--THREAD 1 EMAILS
32-
    VALUES ('Re: howzitgoin', now(), now(), 'INBOX', 'CAEBV8YTu_A6LtP_uGuQ-QSVj3zojWUiwcjGZpsPPEz1Pj3_i1A@mail.gmail.com');
32+
33
 INSERT INTO emails(
34
    subject, created_at, folder, message_id)
35-
    subject, created_at, updated_at, folder, message_id)
35+
    VALUES ('howzitgoin', (NOW() - INTERVAL '90 MINUTE'), null, '53856b1448c89_23fa9605badd015951@3a139e8c-0b81-42c2-8e59-133c262e96a9.mail');
36-
    VALUES ('Re: howzitgoin', now(), now(), 'INBOX', '53856b88a2a09_23fa9605badd01601b@3a139e8c-0b81-42c2-8e59-133c262e96a9.mail');
36+
37
INSERT INTO emails(
38
    subject, created_at, folder, message_id)
39-
    subject, created_at, updated_at, folder, message_id)
39+
    VALUES ('Re: howzitgoin', (NOW() - INTERVAL '80 MINUTE'), 'INBOX', 'CAEBV8YTu_A6LtP_uGuQ-QSVj3zojWUiwcjGZpsPPEz1Pj3_i1A@mail.gmail.com');
40-
    VALUES ('Re: howzitgoin', now(), now(), 'INBOX', 'CAEBV8YT6vx6buOKUga4f=bcNGq_=WzwiqEzm2FWm3HoLZ8SbJA@mail.gmail.com');
40+
41
 INSERT INTO emails(
42
    subject, created_at, folder, message_id)
43-
    subject, created_at, updated_at, folder,  message_id)
43+
    VALUES ('Re: howzitgoin', (NOW() - INTERVAL '70 MINUTE'), 'INBOX', '53856b88a2a09_23fa9605badd01601b@3a139e8c-0b81-42c2-8e59-133c262e96a9.mail');
44-
    VALUES ('Re: howzitgoin', now(), now(), 'INBOX', 'CAEBV8YRGwkNSb3cxquS5abSCmnwLn37GxCpg74mQe7=3SC5cdQ@mail.gmail.com');
44+
45
INSERT INTO emails(
46
    subject, created_at, folder, message_id)
47-
    subject, created_at, updated_at, folder,  message_id)
47+
    VALUES ('Re: howzitgoin', (NOW() - INTERVAL '60 MINUTE'), 'INBOX', 'CAEBV8YT6vx6buOKUga4f=bcNGq_=WzwiqEzm2FWm3HoLZ8SbJA@mail.gmail.com');
48-
    VALUES ('Not part of thread', now(), now(), 'INBOX', 'CAEBV8YRGwkNSb3cxquS5abSCmnwLn37GxCpg74mQe7=3SC5cdQ@mail.gmail.com');
48+
49-
    
49+
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);
109
110
INSERT INTO replies(message_id, created_at, email_id)
111
            VALUES ('53856b1448c89_23fa9605badd015951@3a139e8c-0b81-42c2-8e59-133c262e96a9.mail', now(), 3);
112
113
INSERT INTO replies(message_id, created_at, email_id)
114
            VALUES ('CAEBV8YTu_A6LtP_uGuQ-QSVj3zojWUiwcjGZpsPPEz1Pj3_i1A@mail.gmail.com', now(), 3);
115
116
INSERT INTO replies(message_id, created_at, email_id)
117
            VALUES ('53856b88a2a09_23fa9605badd01601b@3a139e8c-0b81-42c2-8e59-133c262e96a9.mail', now(), 4);
118-
SELECT  "emails".id, "emails".message_id, subject, "count", "emails".created_at, "count"
118+
119
INSERT INTO replies(message_id, created_at, email_id)
120
            VALUES ('CAEBV8YTu_A6LtP_uGuQ-QSVj3zojWUiwcjGZpsPPEz1Pj3_i1A@mail.gmail.com', now(), 4);
121
122-
  SELECT "email_id", count(*) AS "count" FROM "replies" GROUP BY "email_id"
122+
123
            VALUES ('53856b1448c89_23fa9605badd015951@3a139e8c-0b81-42c2-8e59-133c262e96a9.mail', now(), 4);
124
125
INSERT INTO replies(message_id, created_at, email_id)
126
            VALUES ('53856b88a2a09_23fa9605badd01601b@3a139e8c-0b81-42c2-8e59-133c262e96a9.mail', now(), 5);
127-
) ORDER BY "created_at" DESC LIMIT 7 OFFSET 0
127+
128
INSERT INTO replies(message_id, created_at, email_id)
129
            VALUES ('CAEBV8YTu_A6LtP_uGuQ-QSVj3zojWUiwcjGZpsPPEz1Pj3_i1A@mail.gmail.com', now(), 5);
130
131
INSERT INTO replies(message_id, created_at, email_id)
132
            VALUES ('53856b1448c89_23fa9605badd015951@3a139e8c-0b81-42c2-8e59-133c262e96a9.mail', now(), 5);
133
134
-- THREAD 2 REPLIES
135
136
137
INSERT INTO replies(message_id, created_at, email_id)
138
            VALUES ('[email protected]', now(), 8);
139
140
INSERT INTO replies(message_id, created_at, email_id)
141
            VALUES ('5386c3c3f364d_23ff44def2de8849cf@55cedd07-f558-4cc4-b5d2-046dc7642b91.mail', now(), 9);
142
143
INSERT INTO replies(message_id, created_at, email_id)
144
            VALUES ('[email protected]', now(), 9);
145
146
147
-- MY FAILED ATTEMPT
148
SELECT  "emails".id, subject, "emails".created_at, "count"
149
FROM "emails"  
150
LEFT JOIN 
151
(
152
	SELECT "email_id", count(*) AS "count" FROM "replies" GROUP BY "email_id"
153
) AS "r" 
154
ON ("emails"."id" = "r"."email_id") 
155
WHERE (("folder" = 'INBOX') 
156
  --AND ("emails"."id" NOT IN (SELECT "email_id" FROM "replies"))
157
) ORDER BY "created_at" DESC LIMIT 7 OFFSET 0;
158
159
--EXPECTED OUTPUT
160
-----------------------------------------------------------
161
-- ID | SUBJECT             | COUNT
162
-- =========================================================
163
-- 9  | RE: thready mercury | 3
164
-- 9  | RE: howzitgoin      | 4
165
-- 9  | Not part of thread  | (null)