อาจมีการถามก่อนหน้านี้ แต่ฉันไม่สามารถคิดออก ฉันมีphone_clicks
โต๊ะ (ซอซอร์ต sql http://sqlfiddle.com/#!15/855e0/1 )
CREATE TABLE phone_clicks (
id integer NOT NULL,
date date NOT NULL,
industry_id integer NOT NULL,
clicks integer DEFAULT 0 NOT NULL
);
insert into phone_clicks(id, date, industry_id, clicks)
values
(1, '2015-03-16', 1, 15),
(2, '2015-03-16', 2, 7),
(3, '2015-03-16', 3, 0),
(4, '2015-03-17', 1, 12),
(5, '2015-03-17', 3, 4),
(6, '2015-03-17', 4, 22),
(7, '2015-03-18', 1, 19),
(8, '2015-03-18', 2, 35);
ตารางนี้มีการนับเหตุการณ์การคลิกโทรศัพท์สำหรับหลาย industry_ids และวันที่
เป็นไปได้หรือไม่ที่จะนับจำนวนคลิกเหล่านี้สำหรับ industry_ids ที่มีอยู่ทั้งหมดที่มีช่วงวันที่หลายช่วงตามเงื่อนไข ฉันต้องการได้ผลลัพธ์นี้:
------------------------------------------------
industry_id | today | yesterday | last 3 days |
------------------------------------------------
1 | 19 | 12 | 46 |
------------------------------------------------
2 | 35 | 0 | 42 |
------------------------------------------------
3 | 0 | 4 | 4 |
------------------------------------------------
4 | 0 | 22 | 22 |
------------------------------------------------
ฉันลองใช้การนับด้วยพาร์ติชันตามวันที่ แต่ไม่ได้ไปไหน เป็นไปได้หรือไม่ที่จะเลือกข้อมูลนี้ในการสืบค้นเดียว? สิทธิประโยชน์เพิ่มเติมจะสามารถระบุเดือนก่อนหน้าเป็นช่วงวันที่: วันนี้, เมื่อวาน, มีนาคม, กุมภาพันธ์, มกราคม, ฯลฯ
UPDATE : ฉันได้อัพเดทซอเพื่อกำหนดเดือนปัจจุบันเดือนก่อนหน้าและเดือนก่อนหน้าเป็นช่วงวันที่ ซอ Fiddle: http://sqlfiddle.com/#!15/855e0/46
ฉันใช้ PostgreSQL 9.3 แต่ยินดีต้อนรับโซลูชั่น 9.4 เพราะเราจะทำการโยกย้ายไปในไม่ช้า
date
เป็นคอลัมน์ของชนิดและไม่ได้date
timestamp
ข้อสันนิษฐานนั้นได้เผาฉันในบางครั้ง