0

私は、サイトの使用状況を毎時、毎日、毎週、毎月報告しようとしている SQL クエリを持っています。

アプリケーションの性質上、サイトに新しくログインするたびにテーブルにいくつかのエントリが作成されるため、クエリで 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
4

2 に答える 2

0

あなたのクエリがあなたが作成したテーブルにどのように結果をもたらすかは私にはわかりません。あなたのクエリは言及していませんlogoutdttm。いずれにせよ、日付ごとにグループ化し、各日付の個別の「OPRID」を数えることで、必要なことを行うことができます(私があなたの要求を正しく理解していれば):

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

group by(補足として、SQL Server では、列でエイリアスを使用することはできません。)

の代わりに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 では列のエイリアスを一重引用符で囲むことができますが、二重引用符または角かっこを使用する必要があります。単一引用符は、列またはテーブルの名前としてではなく、SQL ステートメントの定数文字列として強い意味を持ちます。

于 2013-07-21T00:40:23.173 に答える
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
于 2013-07-20T22:46:33.510 に答える