我有一张表格如下:
我希望在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)。
同样,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)
答案 0 :(得分: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)
答案 1 :(得分:0)
SELECT Thing
,COUNT(*) NumDays
FROM (SELECT LEFT(PageURL, 2) AS Thing
,DateTime
FROM table
ALL
SELECT RIGHT(PageURL, 2)
,DateTime
FROM table) UniqueDays
由于您在问题中使用了关键词,因此无法正常使用。
通常,使用实际的列/表名称更容易,因此答案可以反映这些 - 它可以避免混淆。
答案 2 :(得分:0)
按日获取计数的第一个查询:
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)
获得所需输出的第二个查询:
<强> SQLFIDDLEExample 强>
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 |