0

私は次のようなテーブルを持っています:

そして、PageURL列とGROUP by DAY列の「ab」と「cd」の出現回数をカウントしたいと思います(つまり、その日の出現回数に関係なく、1としてカウントされます)。

ID  User  Activity  PageURL  ActDateTime
 1  Me    act1      abcd     2013-01-17 19:09:01.040
 2  Me    act2      cdab     2013-01-17 19:09:06.613
 3  You   act2      xyza     2013-01-30 16:10:50.177
 4  Me    act3      xyab     2013-01-30 10:35:09.037

2つの列が必要です...1つは「ab」のカウント用、1つは「cd」のカウント用です。

上記の例では、「ab」には3つのカウントがありますが、最初の2つは同じ日に発生したため(1としてカウント)、2つとしてカウントします。

繰り返しになりますが、PageURL列の「cd」には2つのカウントがありますが、同じ日に発生したため、1つだけカウントしたいと思います。

さらに、月-年、つまり1月12日、2月12日、3月12日、4月12日などでグループ化したいと思います。

いくつかの支援とアドバイスを本当にいただければ幸いです。ありがとうございました!

これは私がこれまでに行ったことです(ただし、DAYによるグループ化は考慮されていません)

SELECT USER,
       department,
       activity,
       [MonthYear] = DATENAME(mm, ActDateTime)+ ' - ' + 
                                  DATENAME(yy, actdatetime), 
       [ab] = sum(case when pageURL like '%ab%' THEN 1 else 0 END), 
       [cd]= sum(CASE WHEN pageURL LIKE '%cd%'THEN 1 ELSE 0 END)
FROM activityLog
GROUP BY USER,
         department,
         activity,
         DATENAME(mm, ActDateTime)+ ' - ' + 
         DATENAME(yy, ActDateTime)
ORDER BY USER,
         department,
         activity,
         DATENAME(mm, ActDateTime)+ ' - ' + DATENAME(yy, ActDateTime)
4

3 に答える 3

2

これは、私が思うカウントを作成するために機能するはずです:

SELECT
  cast(ActDateTime as Date) as DateOnly, 
  SUM(CASE WHEN PageUrl Like '%ab%' THEN 1 ELSE 0 END) as ABCount,
  SUM(CASE WHEN PageUrl Like '%cd%' THEN 1 ELSE 0 END) as CDCount
FROM Table1 
GROUP BY cast(ActDateTime as Date)

SQL フィドル

于 2013-02-22T05:43:44.103 に答える
1

日ごとのカウントを取得する最初のクエリ:

SELECT cast(ActDateTime AS Date) AS DateOnly,
       CASE
           WHEN SUM(CASE WHEN PageUrl LIKE '%ab%' THEN 1 ELSE 0 END) >=1 THEN 1
           ELSE 0
       END AS ABCount,
       CASE
           WHEN SUM(CASE WHEN PageUrl LIKE '%cd%' THEN 1 ELSE 0 END) >=1 THEN 1
           ELSE 0
       END AS CDCount
FROM activityLog
GROUP BY cast(ActDateTime AS Date)

目的の出力を取得するための 2 番目のクエリ:

SQLFIDDLE例

SELECT DATENAME(month, a.ActDateTime)+ ' - ' + DATENAME(yy, a.ActDateTime)
      ,SUM(a.ABCount) as ABCount
      ,SUM(a.CDCount) as CDCount
FROM (SELECT cast(ActDateTime AS Date) AS ActDateTime,
       CASE
           WHEN SUM(CASE WHEN PageUrl LIKE '%ab%' THEN 1 ELSE 0 END) >=1 THEN 1
           ELSE 0
       END AS ABCount,
       CASE
           WHEN SUM(CASE WHEN PageUrl LIKE '%cd%' THEN 1 ELSE 0 END) >=1 THEN 1
           ELSE 0
       END AS CDCount
FROM activityLog
GROUP BY cast(ActDateTime AS Date))a
GROUP BY DATENAME(month, a.ActDateTime)+ ' - ' + DATENAME(yy, a.actdatetime)
ORDER BY DATENAME(month, a.ActDateTime)+ ' - ' + DATENAME(yy, a.actdatetime)

結果:

|       COLUMN_0 | ABCOUNT | CDCOUNT |
--------------------------------------
| January - 2013 |       2 |       1 |
于 2013-03-04T21:55:25.943 に答える
0
SELECT Thing
      ,COUNT(*) NumDays
FROM  (SELECT LEFT(PageURL, 2) AS Thing
       ,DateTime
       FROM table
       ALL
       SELECT RIGHT(PageURL, 2)
             ,DateTime
       FROM table) UniqueDays

質問で使用したキーワードのため、これはそのままでは機能しません。

一般に、実際の列/テーブル名を使用する方が簡単なので、回答にこれらを反映させることができ、混乱を避けることができます。

于 2013-02-22T05:17:14.340 に答える