【发布时间】:2019-09-01 12:06:52
【问题描述】:
我有下表:
ID Value
1 X
1 Y
1 X
1 X
1 X
1 Y
1 X
2 X
2 Y
2 X
2 Z
2 Y
2 X
我需要计算每个 ID 出现 X 的非连续次数。 所以我的输出应该是:
ID COUNT
1 3
2 3
使用Select Count(*), ID From my_table where value = 'X' 计算每次出现的值,而不是仅计算非连续值。
我该如何解决这个问题?
【问题讨论】:
-
不是您的问题的答案,但在您提出这样的问题之前您可能需要了解一些内容:stackoverflow.com/a/20050403/5552667
-
感谢 ZLK。所以现在即使我在查询中添加 ORDER BY ID,它仍然会返回计数 X 的所有值,而不是只计算非连续值。我该如何克服这个问题。
-
对不起,如果不清楚,但这里的“连续”和“非连续”的概念是不正确的。字母没有明确的顺序。您看到的默认顺序可以因各种原因而改变。您可以尝试执行
SELECT ID, COUNT(DISTINCT RN) FROM (SELECT *, RN = ROW_NUMBER() OVER (PARTITION BY ID ORDER BY (SELECT NULL)) - ROW_NUMBER() OVER (PARTITION BY ID, Value ORDER BY (SELECT NULL)) FROM my_table) AS T GROUP BY ID;之类的操作,但无论是否返回准确的结果,将来都可能不会产生准确的结果。
标签: sql-server