查询具有特定值

时间:2018-05-22 16:27:15

标签: mysql

我试图查询的表格记录了特定电话的结果。因此每行都有一个case_id,last_called(日期/时间戳),一个结果(SIQdisp1_a),然后是一些其他信息(批号,员工编号)。

以下是我目前使用的语法:

SELECT 
DATE(last_called), COUNT(SIQdisp1_a), Access.batch_number
FROM
disposition_log
    LEFT JOIN
Access ON disposition_log.case_id = Access.identifier
WHERE
SIQdisp1_a = 14
    AND case_id NOT LIKE 'test%'
    AND batch_number = 171205
GROUP BY DATE(last_called); 

因此,这将计算每天结果数= 14(并且在适当的批次中)。我需要做的是修改它,使它只计算结果,如果它是case_id的最新结果。例如,如果一个人在一天内被召唤3次,并且所有3次结果等于14次,我只需要计算一次。我目前的语法是将14的所有3个实例添加到最终计数中。

我尝试过使用

SELECT MAX(DATE(last_called), COUNT(SIQdisp1_a)

但返回与原始语法相同的结果。我觉得我在这里遗漏了一些基本的东西。 。 。任何建议表示赞赏!

编辑(包括样本数据):

case_id    last_called          SIQdisp1_a
1002175    2018-02-16 12:42:36  14
1002175    2018-02-16 13:20:11  14
1005695    2018-02-15 12:00:00  14
1003018    2018-02-15 12:00:00  13
1003018    2018-02-15 11:59:00  14
1005974    2018-02-15 14:33:33  14

很抱歉,我第一次没有提供样本数据。使用此示例数据,每一行都是对某人的调用(case_id),调用的日期/时间(last_called)以及该调用的结果(SIQdisp1_a)。我需要的是每天14个的计数,但14个必须是该ID的最新条目。因此,在上面的数据集中,结果将类似于:

Date(last_called)    COUNT(SIQdisp1_a)
2018-02-16           1 
2018-02-15           2

因此对于2-16,计数将为1,因为我只想计算最近的记录。如果最近的记录是14,则会将其添加到总计中。对于2-15,它总共为2,因为案例1005974和1005695的最新结果是14.案例1003018不应该被计算,因为即使在11:49有一个14,也有12个电话:00,结果为13.我在顶部发布的语法计算它看到的每个14的实例,它不会查找最新的。谢谢你的帮助!

1 个答案:

答案 0 :(得分:0)

带子查询的1个选项:

select date(last_called), count(case_id) from <table> where (case_id,last_called) in (select case_id, max(last_called) from <table> group by case_id,date(last_called)) and SIQdisp1_a=14 group by date(last_called);