dagda1

replies-III

May 29th, 2014
394
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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() - 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() - 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() - 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() - 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() - 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() - 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() - 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() - 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() - 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() - 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() - INTERVAL '35 MINUTE'), 9);
  142.  
  143. INSERT INTO replies(message_id, created_at, email_id)
  144.             VALUES ('[email protected]', (NOW() - INTERVAL '35 MINUTE'), 9);
  145.  
  146. --- my attempt which does not work
  147. SELECT  "emails".id, subject, "count", "emails".created_at
  148. FROM "emails"  
  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. -- 6  | RE: howzitgoin      | 4
  165. -- 1  | Not part of thread  | (null)
Advertisement
Add Comment
Please, Sign In to add comment