无法在 SQL 子查询中获取 N 个不同的记录
Unable to get N distinct records in SQL subquery
我试图让下面的 SQL 查询中的每个 AgentName
只出现 2 次:-
SELECT j1.AgentName,
j1.LatencyCount,
j2.callid,
j2.jittermax,
j2.agentid
FROM
(SELECT agentname AS AgentName,
count(agentid) AS LatencyCount
FROM metals.client_logs_quality_monitor
WHERE partition_0 >= '2019-09-23'
AND CallTime > 1569222000
AND CallTime <= 1569250399
GROUP BY agentname
ORDER BY LatencyCount DESC LIMIT 5 ) j1,metals.client_logs_quality_monitor j2
WHERE partition_0 >= '2019-09-23'
AND j2.CallTime > 1569222000
AND j2.CallTime <= 1569250399
AND j1.AgentName = j2.agentname
ORDER BY j1.AgentName DESC, jittermax DESC
目前,我的输出低于:-
但我希望它像下面这样(每个代理只有 2 条记录):-
我找不到任何方法来做到这一点。如果您有任何建议,请告诉我。另外,如果您可以建议对现有查询进行任何修改,请告诉我,因为我希望它扫描最少的记录。
您可以使用 row_number()
:
SELECT j1.AgentName, j1.LatencyCount,
j2.callid, j2.jittermax, j2.agentid
FROM (SELECT agentname AS AgentName,
count(agentid) AS LatencyCount
FROM metals.client_logs_quality_monitor
WHERE partition_0 >= '2019-09-23' AND
CallTime > 1569222000 AND
CallTime <= 1569250399
GROUP BY agentname
ORDER BY LatencyCount DESC
LIMIT 5
) j1 JOIN
(SELECT j2.*,
ROW_NUMBER() OVER (PARTITION BY AgentName ORDER BY callid) as seqnum
FROM metals.client_logs_quality_monitor j2
) j2
ON j1.AgentName = j2.agentname
WHERE partition_0 >= '2019-09-23' AND
j2.CallTime > 1569222000 AND
j2.CallTime <= 1569250399 AND
seqnum <= 2
ORDER BY j1.AgentName DESC, jittermax DESC;
我试图让下面的 SQL 查询中的每个 AgentName
只出现 2 次:-
SELECT j1.AgentName,
j1.LatencyCount,
j2.callid,
j2.jittermax,
j2.agentid
FROM
(SELECT agentname AS AgentName,
count(agentid) AS LatencyCount
FROM metals.client_logs_quality_monitor
WHERE partition_0 >= '2019-09-23'
AND CallTime > 1569222000
AND CallTime <= 1569250399
GROUP BY agentname
ORDER BY LatencyCount DESC LIMIT 5 ) j1,metals.client_logs_quality_monitor j2
WHERE partition_0 >= '2019-09-23'
AND j2.CallTime > 1569222000
AND j2.CallTime <= 1569250399
AND j1.AgentName = j2.agentname
ORDER BY j1.AgentName DESC, jittermax DESC
目前,我的输出低于:-
但我希望它像下面这样(每个代理只有 2 条记录):-
我找不到任何方法来做到这一点。如果您有任何建议,请告诉我。另外,如果您可以建议对现有查询进行任何修改,请告诉我,因为我希望它扫描最少的记录。
您可以使用 row_number()
:
SELECT j1.AgentName, j1.LatencyCount,
j2.callid, j2.jittermax, j2.agentid
FROM (SELECT agentname AS AgentName,
count(agentid) AS LatencyCount
FROM metals.client_logs_quality_monitor
WHERE partition_0 >= '2019-09-23' AND
CallTime > 1569222000 AND
CallTime <= 1569250399
GROUP BY agentname
ORDER BY LatencyCount DESC
LIMIT 5
) j1 JOIN
(SELECT j2.*,
ROW_NUMBER() OVER (PARTITION BY AgentName ORDER BY callid) as seqnum
FROM metals.client_logs_quality_monitor j2
) j2
ON j1.AgentName = j2.agentname
WHERE partition_0 >= '2019-09-23' AND
j2.CallTime > 1569222000 AND
j2.CallTime <= 1569250399 AND
seqnum <= 2
ORDER BY j1.AgentName DESC, jittermax DESC;