2

我正在尝试将一些数据放在一起使用 ASP.NET 的高图表条形图。基本上,我有三个用户需要在他们登录系统时进行跟踪。要使用的变体是:

1) 今天 2) 本周 3) 上周 4) 上个月

所以,我已经为今天和上周创建了单独的 tsql 脚本,但我现在有点纠结于如何组合这两个 statemets,最终将是四个。

SELECT Count(*) as CountToday from hitsTable WHERE Convert(date,hitDate) =  
Convert(date,GETDATE()) Group by UserId

SELECT count(*) as CountLatWeek from hitTable 
where hitDate between (DATEADD(week, DATEDIFF (week,0,GETDATE()),-1)) 
AND getDate() Group by UserId

在 google 上搜索,我找到了嵌套的 select 语句,这些语句似乎都与这两个语句形成了依赖关系。但是,我需要做的是生成这样的结果表:

在此处输入图像描述

编辑

我已经设置了一个 SQL Fiddle,所以我们可以测试示例

http://www.sqlfiddle.com/#!6/a21ec

小提琴今天有 tsql,上周有 tsql(可能需要一些调整)

4

3 回答 3

1
Select Distinct
  UserId
, ( Select Count(*) as CountToday from hitsTable h2
    Where h2.UserId = h1.UserId 
      And Convert(date,hitDate) = Convert(date,GETDATE())
  ) As CountToday
, ( Select count(*) as CountLatWeek from hitsTable h2
    Where h2.UserId = h1.UserId 
      And hitDate Between DATEADD(dd, -(DATEPART(dw, GetDate())-1)-7, GetDate())
                      And DATEADD(dd, 7-(DATEPART(dw, GetDate()))-7, GetDate()) 
  ) As CountLastWeek
FROM hitsTable h1
于 2013-09-23T11:18:43.187 回答
0

这是基于@Avinash 对该问题的评论的另一种选择。

Select 
  UserId
, CountTodayTable.CountToday
, CountLatWeekTable.CountLatWeek
, ...
FROM hitsTable h1
Inner Join 
( Select Count(*) as CountToday from hitsTable h2
  Where h2.UserId = h1.UserId 
    And Convert(date,hitDate) = Convert(date,GETDATE())
) CountTodayTable 
  On CountTodayTable.UserId = h1.UserId
Inner Join 
( Select count(*) as CountLatWeek from hitTable h2
  Where h2.UserId = h1.UserId 
    And hitDate between (DATEADD(week, DATEDIFF (week,0,GETDATE()),-1)) And getDate()
) CountLatWeekTable
  On CountLatWeekTable.UserId = h1.UserId
...
于 2013-09-23T13:21:30.583 回答
0

试试这个查询

select 
   id,
   sum(case when Convert(date,hitDate) = Convert(date,GETDATE()) then 1 else 0 end) as as CountToday,
   sum(hitDate between (DATEADD(week, DATEDIFF (week,0,GETDATE()),-1)) AND getDate() then 1 else 0 end)  as CountLatWeek,
   ......  -- Add more condition       
from 
   hitsTable 
group by 
   UserId

编辑

select 
  userid, 
  sum(case when Convert(date,hitDate) =  
Convert(date,GETDATE()) then 1 else 0 end) as cnt

from 
hitstable
group by userid

小提琴

| USERID | CNT |
|--------|-----|
|  User1 |   3 |
|  User2 |   0 |
于 2013-09-23T13:15:54.903 回答