Sql 计数不同ID
我试图计算表的ID,其中它的最后状态不等于“调用” 表1 ╔═════════╦════════╦══════════╗ ║ q_log_id║ q_id║ q_状态║ ╠═════════╬════════╬══════════╣ ║ 1.║ 1.║ 等待║ ║ 2.║ 1.║ 等待║ ║ 3.║ 1.║ 打电话║ ║ 4.║ 2.║ 等待║ ║ 4.║ 2.║ 等待║ ║ 5.║ 3.║ 等待║ ║ 5.║ 3.║ 等待║ ╚═════════╩════════╩══════════╝Sql 计数不同ID,sql,sql-server,count,Sql,Sql Server,Count,我试图计算表的ID,其中它的最后状态不等于“调用” 表1 ╔═════════╦════════╦══════════╗ ║ q_log_id║ q_id║ q_状态║ ╠═════════╬════════╬══════════╣ ║ 1.║ 1.║ 等待║ ║ 2.║ 1.║ 等待║ ║ 3.║ 1.║ 打电话║ ║ 4.║ 2.║ 等待║ ║ 4.║ 2.║ 等待║ ║ 5.║ 3.║ 等待║ ║ 5.║ 3.║ 等待║
因此,计数应该返回2。我不擅长查询,所以我需要一些帮助。我尝试使用distinct进行计数,但它仍然不适用于我。您可以使用窗口分析函数row\u number进行计数,您可以根据q\u log\u id进行排序,并对q\u id列上的行进行分区 获取最后一行并检查是否调用了status
您可以使用窗口分析函数row_number来完成此操作,您可以根据q_log_id进行排序,并对q_id列上的行进行分区 获取最后一行并检查是否调用了status
如果你不在乎“Called”是最后一个条目,你可以在“Called”从未出现的地方计算q_id值
SELECT COUNT(1)
FROM
(SELECT q_id
FROM table1
GROUP BY q_id
HAVING MAX(CASE WHEN q_status ='Called' THEN 1 END) IS NULL
) AS v
这是因为查询
SELECT q_id,MAX(CASE WHEN q_status='Called' THEN 1 END)
FROM table1
GROUP BY q_id
如果“Called”从未与q_id关联,则给出NULL
Q_ID MAX(CASE WHEN Q_STATUS='CALLED' THEN 1 END)
1 1
2 (null)
3 (null)
如果你不在乎“Called”是最后一个条目,你可以在“Called”从未出现的地方计算q_id值
SELECT COUNT(1)
FROM
(SELECT q_id
FROM table1
GROUP BY q_id
HAVING MAX(CASE WHEN q_status ='Called' THEN 1 END) IS NULL
) AS v
这是因为查询
SELECT q_id,MAX(CASE WHEN q_status='Called' THEN 1 END)
FROM table1
GROUP BY q_id
如果“Called”从未与q_id关联,则给出NULL
Q_ID MAX(CASE WHEN Q_STATUS='CALLED' THEN 1 END)
1 1
2 (null)
3 (null)
你所说的最后状态是什么意思?请解释为什么计数应该返回2。我不确定你想做什么?2和3似乎都没有被调用的最后状态,假设你想报告q_id,按q_log_id排序。你需要澄清一下。你所说的最后状态是什么意思?请解释为什么计数应该返回2。我不知道你想做什么?2和3似乎都没有被调用的最后状态,假设你想报告q_id,按q_log_id排序。你需要澄清一下。