2014-04-16 74 views
0

我試圖分組兩次,一次由個人級別字段,然後由時間戳字段的月份。按月的時間戳分組

小新的SQL,但這裏是我想出了讀另一SO張貼在這裏後:SQL query to group by month part of timestamp

SELECT 
     VwNIMUserDim.USER_EMAIL_ADDRESS, 
     VwNIMEventFct.NIM_USER_ID, 
     SUM(CASE WHEN NIM_EVENT_TYPE_ID = 880 THEN 1 ELSE 0 END) AS APP_OPEN, 
     SUM(CASE WHEN NIM_EVENT_TYPE_ID = 881 THEN 1 ELSE 0 END) AS AUTODL_SETTINGS_SAVE, 
     SUM(CASE WHEN NIM_EVENT_TYPE_ID = 882 THEN 1 ELSE 0 END) AS AUTO_QUERY_CONFIRM, 
     SUM(CASE WHEN NIM_EVENT_TYPE_ID = 883 THEN 1 ELSE 0 END) AS ISSUE_CLOSE, 
     SUM(CASE WHEN NIM_EVENT_TYPE_ID = 884 THEN 1 ELSE 0 END) AS ISSUE_DOWNLOAD, 
     SUM(CASE WHEN NIM_EVENT_TYPE_ID = 885 THEN 1 ELSE 0 END) AS ISSUE_DOWNLOAD_COMPLETE, 
     SUM(CASE WHEN NIM_EVENT_TYPE_ID = 886 THEN 1 ELSE 0 END) AS PICKER_SEND_PICKS 
FROM RDMAVWSANDBOX.VwNIMEventFct 
GROUP BY NIM_USER_ID, MONTH('EVENT_GMT_TIMESTAMP') 

我的SQL客戶端,Teradata的,返回的錯誤消息說: 「選擇失敗的錯誤3706語法錯誤預期的東西之間「」該月的關鍵字

這是我第一次做兩件事情:。分組通過兩次並使用Month函數

我在做什麼錯在這裏H +我每月通過電子郵件地址用戶分組嗎?

+0

首先關閉領域的抽動使它成爲一個字符串。我不認爲你想要那樣。其次,我認爲您需要將該字段作爲選擇的一部分,以便根據SQL的版本和風格進行分組。 – xQbert

回答

3

有一個在Teradata數據/標準SQL無月功能,它的提取物(年/月/日/時/分/秒) :

EXTRACT(MONTH FROM EVENT_GMT_TIMESTAMP) 
0

可能取決於數據庫的原點(MSSQL,MySQL和甲骨文,DB2等)

SELECT 
     VwNIMUserDim.USER_EMAIL_ADDRESS, 
     VwNIMEventFct.NIM_USER_ID, 
     MONTH(EVENT_GMT_TIMESTAMP), 
     SUM(CASE WHEN NIM_EVENT_TYPE_ID = 880 THEN 1 ELSE 0 END) AS APP_OPEN, 
     SUM(CASE WHEN NIM_EVENT_TYPE_ID = 881 THEN 1 ELSE 0 END) AS AUTODL_SETTINGS_SAVE, 
     SUM(CASE WHEN NIM_EVENT_TYPE_ID = 882 THEN 1 ELSE 0 END) AS AUTO_QUERY_CONFIRM, 
     SUM(CASE WHEN NIM_EVENT_TYPE_ID = 883 THEN 1 ELSE 0 END) AS ISSUE_CLOSE, 
     SUM(CASE WHEN NIM_EVENT_TYPE_ID = 884 THEN 1 ELSE 0 END) AS ISSUE_DOWNLOAD, 
     SUM(CASE WHEN NIM_EVENT_TYPE_ID = 885 THEN 1 ELSE 0 END) AS ISSUE_DOWNLOAD_COMPLETE, 
     SUM(CASE WHEN NIM_EVENT_TYPE_ID = 886 THEN 1 ELSE 0 END) AS PICKER_SEND_PICKS 
FROM RDMAVWSANDBOX.VwNIMEventFct 
GROUP BY NIM_USER_ID, MONTH(EVENT_GMT_TIMESTAMP) 
+0

感謝您花時間回答。增加了MONTH(EVENT_GMT_TIMESTAMP)並刪除了引號,但仍然沒有喜悅。除了它現在提到的第4行(MONTH(EVENT _... - Teradata突出顯示有錯誤的行) –

+0

我設法使這個工作與一些更多的研究: EVENT_GMT_TIMESTAMP(FORMAT'yyyy-mm')(char (7)) –

1

您所查詢的書面會導致產品(笛卡爾)的VwNIMUserDIm和VwNIMEventFct表(視圖)之間的連接。我曾冒昧根據您的意見以前的響應修改SQL:

SELECT 
     User_.USER_EMAIL_ADDRESS, 
     Event_.NIM_USER_ID, 
     Event_.EVENT_GMT_TIMESTAMP(FORMAT 'yyyy-mm')(char(7)) AS EVENT_MONTH, 
     SUM(CASE WHEN Event_.NIM_EVENT_TYPE_ID = 880 THEN 1 ELSE 0 END) AS APP_OPEN, 
     SUM(CASE WHEN Event_.NIM_EVENT_TYPE_ID = 881 THEN 1 ELSE 0 END) AS AUTODL_SETTINGS_SAVE, 
     SUM(CASE WHEN Event_.NIM_EVENT_TYPE_ID = 882 THEN 1 ELSE 0 END) AS AUTO_QUERY_CONFIRM, 
     SUM(CASE WHEN Event_.NIM_EVENT_TYPE_ID = 883 THEN 1 ELSE 0 END) AS ISSUE_CLOSE, 
     SUM(CASE WHEN Event_.NIM_EVENT_TYPE_ID = 884 THEN 1 ELSE 0 END) AS ISSUE_DOWNLOAD, 
     SUM(CASE WHEN Event_.NIM_EVENT_TYPE_ID = 885 THEN 1 ELSE 0 END) AS ISSUE_DOWNLOAD_COMPLETE, 
     SUM(CASE WHEN Event_.NIM_EVENT_TYPE_ID = 886 THEN 1 ELSE 0 END) AS PICKER_SEND_PICKS 
FROM RDMAVWSANDBOX.VwNIMEventFct Event_ 
JOIN RDMAVWSANDBOX.VwNIMUserDim User_ 
    ON Event_.NIM_USER_ID = User_.NIM_USER_ID 
GROUP BY 1,2;