2017-09-13 28 views
2

用下面的SQL表時不同的表:SQL:聚集來自不同的日期格式

表:

財政
DateID | date     | fiscal_year | fiscal_week 
20170101 2017-01-01 00:00:00.0 2017   2017 WK 01 
20170102 2017-01-02 00:00:00.0 2017   2017 WK 01 

表:email_info

email_id | email_name | email_subjectline 
123  New_Year_2017 Welcome the new year! 
345  Reminder  Don't forget 

表:sent_info

email_id | sent_date 
123  | 1/1/2017 8:58:39 PM 
345  | 1/2/2017 6:33:39 AM 

表:click_info

recipient | email_id | click_date 
XYZ   123   1/7/2017 4:25:27 PM 
ABC   123   1/5/2017 3:13:56 AM 
CDF   345   1/6/2017 2:20:16 AM 
ABC   345   1/14/2017 3:33:25 AM 

很明顯,每個表中有很多行。

電子郵件表格之間的連接非常簡單。

SELECT * 
FROM email_info 
JOIN sent_info 
ON sent_info.email_id = email_info.email_id 
JOIN click_info 
ON click_info.email_id = email_info.email_id 

我用下面的掙扎:

  • 如何讓所有日期,相同的格式? (我不需要的時候, 只有一天)
  • 如何加入財表,所以我可以通過財政周例如
  • 發送日期後過濾器如何計數的電子郵件的所有點擊7天(這不能按日期硬編碼的,但必須是動態的)

這就是我要找的輸出(通過財政一週過濾= 2017年WK 01):

email_id | email_name | sent_date | fiscal_week | Clicks 
123  New_year_2017 1/1/2017  2017 WK 01  2 
345  Reminder  1/2/2017  2017 WK 01  1 

*請注意: click_info表格示例中的最後一次點擊未計入,因爲它是wa超過發送日期後的7天內。

** DateID是一個整數,sent_date和click_date都是字符串/ VARCHAR

+0

哪些數據類型是列dateId,sent_date,sent_date? – scaisEdge

+0

dateid是整數,sent_date和click_date是字符串/ varchar – jeangelj

+0

帶日期和時間的字符串varchar ..以及數字等於日期的整數..? ?????我很抱歉,但不是一個合理的方式設計一個數據庫.. – scaisEdge

回答

2

假設dateId爲varchar,其餘的是日期時間應該是

select a.email_id, a.email_name, date(b.sent_date), c.fiscal_week, count(d.click_date) 
from email_info a 
inner join fiscal c on str_to_date(c.dateID, '%Y%m%d') = date(b.sent_date) 
inner join sent_info b on b.email_id = c.email_id 
inner join click_info d on d.email_id = b.email_id 
    and date(d.click_date) between date(b.sent_date) and DATEADD(week,1,date(b.sent_date)) 
group by a.email_id, a.email_name, date(b.sent_date), c.fiscal_week 

PS 做的事實,查詢結構是定義是否有其他格式可以正確轉換並更改單件

+0

不幸的是,其他日期不是日期時間,他們是字符串/ varchar – jeangelj

+0

然後你可以簡單地將字符串轉換爲日期時間使用str_to_date和整數,你可以簡單地把它當作一個字符串...不應該很難..查詢的結構已經建立,所以你只能單一的一塊.. – scaisEdge

+0

我是非常新的演員,你會介意給我看,你會怎麼做?非常感謝您的幫助 – jeangelj