【问题标题】:How do I count record and break if values not matched?如果值不匹配,我如何计算记录和中断?
【发布时间】:2017-08-29 10:05:00
【问题描述】:

我有这张表的记录

   No  |  Part | value |
------ | ------|------ |
   1   |   A1  |   2   |
   2   |   A1  |   2   |
   3   |   A1  |   1   |
   4   |   A1  |   2   |
   5   |   A1  |   2   |
   6   |   A1  |   2   |

当值不匹配时,我可以计算最后一条记录和中断/结束计数吗?

例如计数值等于2,计数结果为3

【问题讨论】:

  • 当值不匹配时 ...也许你的意思是当 value 改变时?
  • 为什么需要break(查询慢/记录多)?你能展示一下你到目前为止所拥有的吗?
  • 是的@GiorgosBetsos,因为我想得到计算我的Web的某些功能的结果。@RalfdeKleine

标签: sql sql-server sql-server-2005


【解决方案1】:

我怀疑您的意思是相邻值的计数相同。在 SQL Server 2005 中,您可以使用行号的差异来做到这一点:

select count(*)
from (select value, (seqnum - seqnum_v), grp, count(*) as cnt
      from (select t.*,
                   row_number() over (partition by part order by id) as seqnum,
                   row_number() over (partition by part, value order by id) as seqnum_v
            from t
           ) t
      group by value, (seqnum - seqnum_v)
     ) t;

【讨论】:

  • 我试过这个语句,但是它减去了值 2 和值 1 的总和,所以这个语句的结果是 5
猜你喜欢
  • 2021-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-22
  • 2017-08-30
  • 1970-01-01
  • 2023-04-04
相关资源
最近更新 更多