【问题标题】:Determining the session with the highest max count确定最大计数最高的会话
【发布时间】:2015-03-03 02:04:56
【问题描述】:

我有一个包含以下字段的表:

  • 访问 ID
  • CPCCID
  • 日期
  • Time_IN
  • 超时
  • 课程
  • LA_CPCCID

有 3 个会话,9-12、12-3 和 3-6。

我需要一个脚本来计算访问者最多的会话。

我有这个附加的代码,它将确定会话 # 和最大计数:

select Time_In ,
CASE
When cast(Time_In as time) >'12:00:00' and cast(Time_In as time) <='15:00:00' /* and date = cast(GETDATE() as date)*/ then 'Session 2' 

when cast(Time_In as time) >'3:00:00' and cast(Time_In as time)<= '6:00:00' /*and date = cast(GETDATE() as date)*/ then 'Session 3'

else 'Session 1'
end "sessions"
from Lab_Visits2;


select max(visit.cnt) 
from
(select course, count(course) cnt
from Lab_Visits2
group by Course) visit;

【问题讨论】:

    标签: sql count max


    【解决方案1】:

    如果我正确理解了您的问题,您希望返回按会话/课程分组的访问者最多的会话和课程。如果是这样,这将使用几个common-table-expressions 来选择会话,然后按会话和课程分组以获取访问者数量。最后,使用row_number 建立最大值:

    with cte as (
      select 
          case
            when cast(Time_In as time) >'12:00:00' and cast(Time_In as time) <='15:00:00' /* and date = cast(GETDATE() as date)*/ then 'Session 2' 
            when cast(Time_In as time) >'3:00:00' and cast(Time_In as time)<= '6:00:00' /*and date = cast(GETDATE() as date)*/ then 'Session 3'
            else 'Session 1'
          end session,
          course
        from Lab_Visits2
      ), ctecnt as (
      select session, course, count(*) cnt
      from cte
      group by session, course
    )
    select session, course, cnt
    from (
      select session, course, cnt, row_number() over (order by cnt desc) rn
      from ctecnt
      ) t
    where rn = 1
    

    如果我误解了,而您只想要最高计数的会话(当然不管),那么只需从所有查询中删除课程字段。

    【讨论】:

    • 它有效,我不需要日期,但是当我取消注释与当前日期的比较时(getdate())它不准确。
    • @kahunabee -- 不准确,你能解释一下,有错误吗?您是否有一个名为date 的字段或者您正在使用Time_InDate 是保留字,如果是这种情况,您需要用括号将字段括起来...
    • 我的意思是我不需要这门课,对不起,但日期问题令人费解,我很感激。
    • 这些是我表中的字段(只是测试数据)
    • 这些是我表中的字段 09:15:00 11:15:00 2014-11-02 11:15:00 01:15:00 2015-03-02 10:15:00 01:15:00 2014-11-02 03:01:00 04:30:00 2015-03-02 12:30:00 01:00:00 2015-03-02 11:50:00 01:30:00 2015-01-01 所以当我只为当前日期运行代码时,它应该是会话 2,计数为 2,但我得到会话 1,计数为 4(没有日期过滤器是正确的)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-18
    • 2011-12-04
    • 2011-06-06
    • 2020-09-16
    • 2022-01-15
    相关资源
    最近更新 更多