Sql 按状态划分行
我有一个查询,它通过状态分区获取结果作为秩。但我需要下面给出的结果Sql 按状态划分行,sql,google-bigquery,Sql,Google Bigquery,我有一个查询,它通过状态分区获取结果作为秩。但我需要下面给出的结果 COUNTERID status transaction_time RANK 121 NEW Nov-09-2019 8:32:19 1 121 NEW Nov-09-2019 8:32:19 2 121 CLAIMED Nov-09-2019 8:32:21 1 121 CLAIMED Nov-09-2019 8:32:21 2 121 NEW Nov-09-2019 8:32:59 1 121 CLAIMED N
COUNTERID status transaction_time RANK
121 NEW Nov-09-2019 8:32:19 1
121 NEW Nov-09-2019 8:32:19 2
121 CLAIMED Nov-09-2019 8:32:21 1
121 CLAIMED Nov-09-2019 8:32:21 2
121 NEW Nov-09-2019 8:32:59 1
121 CLAIMED Nov-09-2019 8:32:59 2
121 RESOLVED Nov-09-2019 8:33:30 1
121 RESOLVED Nov-09-2019 8:49:58 2
121 RESOLVED Nov-13-2019 6:51:11 3
222 NEW Nov-11-2019 22:15:52 1
222 NEW Nov-11-2019 22:15:54 2
222 RESOLVED Nov-11-2019 22:15:54 1
222 NEW Nov-11-2019 22:15:55 1
222 CLAIMED Nov-11-2019 22:16:24 1
222 CLAIMED Nov-11-2019 22:16:24 2
222 RESOLVED Nov-11-2019 22:16:56 1
222 CLAIMED Nov-11-2019 22:33:06 1
222 RESOLVED Nov-12-2019 7:39:00 1
222 RESOLVED Nov-12-2019 23:59:45 2
SELECT COUNTERID, status, transaction_time, ROW_number()
OVER (
partition by COUNTERID, status
order by COUNTERID, transaction_time
) AS RANK
FROM COUNTER_HISTORY
请帮我得到想要的结果。提前谢谢。
使用标准SQL这是一个缺口和孤岛问题。行号的差异应符合您想要识别组的要求:
select ch.* except (seqnum, seqnum_s),
row_number() over (partition by counter_id, status, (seqnum_s - seqnum)
order by transaction_time
) as ranking
from (select ch.*,
row_number() over (partition by counter_id order by transaction_time) as seqnum,
row_number() over (partition by counter_id, status order by transaction_time) as seqnum_s
from counter_history ch
) ch;
解释为什么行号的差异标识具有相同值的相邻行有点麻烦。但是,如果您查看子查询的结果,您应该会看到它是如何工作的。这是一个缺口和孤岛问题。行号的差异应符合您想要识别组的要求:
select ch.* except (seqnum, seqnum_s),
row_number() over (partition by counter_id, status, (seqnum_s - seqnum)
order by transaction_time
) as ranking
from (select ch.*,
row_number() over (partition by counter_id order by transaction_time) as seqnum,
row_number() over (partition by counter_id, status order by transaction_time) as seqnum_s
from counter_history ch
) ch;
解释为什么行号的差异标识具有相同值的相邻行有点麻烦。但是,如果您查看子查询的结果,您应该会看到它是如何工作的。谢谢gordon,我还有一个列源要在排名中考虑。尝试过。但没有运气。选择ch.*除了seqnum、seqnum、按计数器id分区的行号、状态、源、seqnum-seqnum按事务时间排序,从选择ch.*开始,按计数器id分区的行号、按事务时间的状态顺序,作为seqnum,按计数器id、状态、按事务时间划分的分区上的行数,如计数器历史记录中的seqnum@syncdm2012。你的问题没有提到一个叫做source的专栏。如果您无法调整此查询,我建议您提出一个新问题,并提供适当的数据和解释。谢谢。这是参考资料,谢谢戈登,我还有一个专栏资料要在排名中考虑。尝试过。但没有运气。选择ch.*除了seqnum、seqnum、按计数器id分区的行号、状态、源、seqnum-seqnum按事务时间排序,从选择ch.*开始,按计数器id分区的行号、按事务时间的状态顺序,作为seqnum,按计数器id、状态、按事务时间划分的分区上的行数,如计数器历史记录中的seqnum@syncdm2012。你的问题没有提到一个叫做source的专栏。如果您无法调整此查询,我建议您提出一个新问题,并提供适当的数据和解释。谢谢。这是参考资料