首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL频率计数

SQL频率计数
EN

Stack Overflow用户
提问于 2018-03-30 19:38:10
回答 4查看 3.3K关注 0票数 1

我在SSMS有一张桌子:

代码语言:javascript
复制
Id  Date    Value
111 1/1/18  x
111 1/2/18  x
111 1/3/18  y
111 1/4/18  y
111 1/5/18  x
111 1/6/18  x
222 1/3/18  z
222 1/6/18  y
222 1/8/18  y

我想数一下最近值的频率。因此,输出将是:

代码语言:javascript
复制
Id  Value  Days
111 x      2   *(for 1/5/18 & 1/6/18)*
222 y      3   *(for 1/6/18 & 1/8/18; Here I assume 1/7/18 is a weekend or holiday.  Even though my table skips the weekend, we still want to count days for the weekend)*

这是怎么做的?非常感谢!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-03-30 19:46:14

使用lag获取上一行的值,然后使用运行的和分配组。然后计算第一组中的数字。

代码语言:javascript
复制
select id,val,datediff(day,min(date),max(date))+1 as days
from (select t.*,sum(case when val=prev_val then 0 else 1 end) over(partition by id order by date desc) as grp
      from (select t.*,lag(val) over(partition by id order by date desc) as prev_val
            from tbl t
           ) t
     ) t
where grp=1
group by id,val
票数 1
EN

Stack Overflow用户

发布于 2018-03-30 19:42:12

尝试:

代码语言:javascript
复制
SELECT COUNT(*) FROM Table1 WHERE Value = 
(
    SELECT Value FROM Table1 WHERE Id = MAX(Id)
)
票数 1
EN

Stack Overflow用户

发布于 2018-03-30 19:42:39

我希望你想要这个

代码语言:javascript
复制
select Id, count(Date) as "Days", Value from SSMS
group by ID, Value

如果我错了就纠正我

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49580406

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档