gpt4 book ai didi

sql - ROW_NUMBER() 与 DISTINCT

转载 作者:行者123 更新时间:2023-12-02 03:29:14 25 4
gpt4 key购买 nike

我有一张工单分配表,显示了工单在解决之前转移到的不同组。这是一个简化的表格:

asgn_grp | date   | ticket_id
---------|--------|----------
A | 1-1-15 | 1
A | 1-2-15 | 1
B | 1-3-15 | 1
A | 1-1-15 | 2
C | 1-2-15 | 2
B | 1-3-15 | 2
C | 1-1-15 | 3
B | 1-2-15 | 3

我需要计算门票分配到的第二个不同组的数量,这意味着我想知道一旦门票从其所在的组中转移出来,内部转移就不算在内。所以 ticket 1 的第二个不同组是 Bticket 2Cticket 3B。我需要对这些进行计数,所以我需要的最终结果是

asgn_grp | count
---------|-------
B | 2
C | 1

我试过了

SELECT distinct top 2 asgn_grp, ROW_NUMBER() OVER (ORDER BY date) 

作为我的子查询并从中提取第二个子查询,但是当我添加 ROW_NUMBER() 时,它弄乱了我的 distinct。如果我将 ROW_NUMBER() 从子查询中拉出,我现在可以对我的值进行排序,以确保我在 DISTINCT 列表之后得到第二个值。

此外,如果我有任何不清楚的地方,请告诉我。

最佳答案

尝试使用 group by 两次,而不是使用 distinct。

select asgn_grp, count(*) from (
select * , row_number() over (partition by ticket_id order by min_date) rn
from (
select asgn_grp, ticket_id, min(date) min_date
from Table1 group by asgn_grp, ticket_id
) t1
) t2 where rn = 2
group by asgn_grp;

http://sqlfiddle.com/#!3/a0d1e

派生表 t1 包含每个 ticket_id 的每个唯一 asgn_grp 以及每个 asgn_grp 的最短日期.对于示例数据,t1 具有以下行:

ASGN_GRP    TICKET_ID   MIN_DATE
A 1 January, 01 2015 00:00:00+0000
B 1 January, 03 2015 00:00:00+0000
A 2 January, 01 2015 00:00:00+0000
B 2 January, 03 2015 00:00:00+0000
C 2 January, 02 2015 00:00:00+0000
B 3 January, 02 2015 00:00:00+0000
C 3 January, 01 2015 00:00:00+0000

然后,外部查询使用 row_number()ticket_id 中的每个 asgn_grp 的最小日期进行编号,并为 生成以下内容t2

ASGN_GRP    TICKET_ID   MIN_DATE    RN
A 1 January, 01 2015 00:00:00+0000 1
B 1 January, 03 2015 00:00:00+0000 2
A 2 January, 01 2015 00:00:00+0000 1
C 2 January, 02 2015 00:00:00+0000 2
B 2 January, 03 2015 00:00:00+0000 3
C 3 January, 01 2015 00:00:00+0000 1
B 3 January, 02 2015 00:00:00+0000 2

此表针对 RN = 2 进行过滤,并按 asgn_grp 分组以获得每个 asgn_grp 的计数。

关于sql - ROW_NUMBER() 与 DISTINCT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28181388/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com