我有一个访问数据库,其中包含从事件管理系统中导出的记录。我正在尝试解决由于计数事件的方式而造成的重复计数问题。只要每个事件只有一个操作员,就可以进行计数。我在用例中遇到的问题是车辆的操作涉及两个操作员,或者在另一个用例中发生了两个操作员相互碰撞的事件。对于任何事件,应向操作员收取可避免或不可避免的费用。对于两个重复案例中的任何一个事件,可以向运营商A收取可避免费用,向运营商B收取不可避免费用。但是,在宏级别上,即使我们在数据库中有两个记录都对两个操作员收费,我们仍将这视为一次事件。
样本数据
Incident_Number EmpName IncType Charge_1
1A Joe Collision Avoidable
1B Tom Collision Avoidable
1B Sue Collision Unavoidable
1C Harry Collision Avoidable
1C John Collision Unavoidable
1C Kathi Collision Unavoidable
1D Larry Collision Unavoidable
查询结果的示例
Incident_Number EmpName IncType Charge_1
1A Joe Collision Avoidable
1B Tom Collision Avoidable
1C Harry Collision Avoidable
1D Larry Collision Unavoidable
在尝试使它起作用时,我尝试了该测试,但是并不能防止重复。我们的问题只是存储数据的方式吗?我应该在Charge_1列上尝试DISTINCT吗?
SELECT *
FROM tst2019 as c1
WHERE Incident_Number <>
(SELECT MAX(Incident_Number) FROM tst2019 as c2
WHERE c2.charge_1=c1.charge_1);
答案 0 :(得分:0)
古斯塔夫, 这是我使用您的解决方案的方式:
SELECT
Incident_Number,
Date_of_Incident,
Mode,
Incident_Type,
charge_1,
First(employee_name) AS empname,
Division
FROM
tst2019
GROUP BY
Incident_Number,
Date_of_Incident,
Mode,
Incident_Type,
Charge_1,
Division;
我确实有一个异常,因为缆车的情况下,车辆的运行需要两名员工。对于相同的事件编号,查询结果中有1行表示“可避免”,1行表示“无法避免”。除此之外,这完全符合我的意愿,因此感谢您的帮助。
最坏的情况是,我总是可以手动检查缆车事故。问题,运行特定于“ Avoidables”的SQL查询是否有意义,然后执行特定于“ Unavoidables”的第二个追加查询,但是让查询忽略事件编号在初始“ Avoidable”查询中已经存在的任何结果结果。如果可能的话,您能否提供一些有关如何完成此工作的指导?再次感谢您在解决此重复问题方面的帮助。
您必须按事件编号分组:
SELECT
Incident_Number,
First(EmpName) As Operator,
IncType,
Min(Avoidable) As Status
FROM
tst2019
GROUP BY
Incident_Number,
IncType
请注意,FIRST只会选择“ a”运算符,而不一定是“ first”,因为表中没有任何内容定义谁/什么是第一。