2013-07-20 25 views
0

我有一個SQL查詢,我期待每小時,每天,每週和每月報告網站使用情況。查詢用戶登錄使用不同的和reprot每日,每週和每月的使用情況

我要求查詢使用Distinct,因爲應用程序的性質會在每次新登錄網站時爲表創建多個條目。

這是我到目前爲止有:

SELECT DISTINCT OPRID, 
CONVERT(varchar(12), LOGINDTTM, 112) 'Date' 
from PSACCESSLOG_HIST 
where OPRID NOT IN ('AUTOPROC', 'PSAPPS', 'PHSADBA', 'PTWEBSERVER') 
ORDER BY Date 

這將給以下內容:如上白天提到

OPRID  LOGIPADDRESS  LOGINDTTM  LOGOUTDTTM 
dadams  10.1.1.5  20130612  20130612 
jblake  10.1.1.5  20130614  20130614 

首先,我確實需要對數據進行分組。這就是我要找的,對於這部分:

LOGINDATE-TIME TOTAL-LOGINS 
20130612   25 
20130613   35 
20130614   45 

回答

0
SELECT CONVERT(varchar(12), LOGINDTTM, 112) 'Date', count(*) as TOTAL-LOGINS 
from PSACCESSLOG_HIST 
where OPRID NOT IN ('AUTOPROC', 'PSAPPS', 'PHSADBA', 'PTWEBSERVER') 
GROUP BY Date 
ORDER BY Date 
+0

您可以擴展您的建議解決方案爲何解決該問題? –

+0

謝謝,這給了我想找的東西。順便說一句,你知道我需要什麼參數轉換爲顯示小時以及 – user1133448

+0

不,我不知道我的頭頂。但你可以輕鬆地谷歌。 –

0

這是我不清楚如何在表中查詢結果你生產。您的查詢沒有提到logoutdttm。在任何情況下,你可以做你想做的按照日期分組和每個日期算起的獨特的「OPRID」 S(如果我理解正確的話你的要求):

SELECT CONVERT(varchar(12), LOGINDTTM, 112) as "Date", count(distinct OPRID) as NumOPRs 
from PSACCESSLOG_HIST 
where OPRID NOT IN ('AUTOPROC', 'PSAPPS', 'PHSADBA', 'PTWEBSERVER') 
group by CONVERT(varchar(12), LOGINDTTM, 112) 
ORDER BY Date 

(作爲一個方面說明,SQL服務器沒有按「T讓你在group by列使用別名)

取而代之的是convert()的,我喜歡的日期時間轉換爲date數據類型:

SELECT cast(LOGINDTTM as date) as "Date", count(distinct OPRID) as NumOPRs 
from PSACCESSLOG_HIST 
where OPRID NOT IN ('AUTOPROC', 'PSAPPS', 'PHSADBA', 'PTWEBSERVER') 
group by cast(LOGINDTTM as date) 
ORDER BY "Date" 

此外,儘管SQL Server可以讓你放置別名r列在單引號中,你應該使用雙引號或方括號。單引號在SQL語句中作爲常量字符串具有很強的含義,而不是作爲列或表的名稱。

相關問題