如何检查不同日期的重复发布?

时间:2017-12-01 07:27:16

标签: mysql sql

我发现在我的数据库中的不同日期捕获了重复的虚拟事件(卡片输出)。应按顺序捕获完整事件(卡入,引脚验证,输入提取金额,现金输出,卡输出)。我可以使用什么查询来查找具有这种情况的所有受影响的ATM(在按日期排序之后没有捕获完整事件),如何找出ATM捕获每个atm的虚拟卡输出事件的日期?我需要弄清楚机器在连续行中有卡出事件的日期(在每个卡出事件之间不包含其他事件)

select date, atm, event
from table 
where atm = a 
order by date desc

DATE              ATM   Event
24/10/2017 20:59    a   Card out
22/10/2017 10:12    a   Card out
20/10/2017 17:20    a   Card out
17/10/2017 20:59    a   Card out
17/09/2017 17:22    a   Card out
17/09/2017 17:22    a   Cash out
17/09/2017 17:21    a   input withdraw amount
17/09/2017 17:20    a   PIN verification
17/09/2017 17:20    a   Card in
16/09/2017 17:22    a   Cash out
16/09/2017 17:21    a   input withdraw amount
16/09/2017 17:20    a   PIN verification
16/09/2017 17:20    a   Card in

2 个答案:

答案 0 :(得分:0)

你的问题不明确,你是否在寻找类似的东西; (找到重复的ATM和事件字段)

select ATM,Event from Table group by ATM,Event having count(*) > 1

答案 1 :(得分:0)

SELECT * FROM table
WHERE (event = 'Card out' OR event = 'Card in') AND atm IN
(
    SELECT t1.atm FROM
    (
        SELECT atm, COUNT(*) as count
        FROM `table`
        WHERE event = 'Card out'
        GROUP BY ATM
    ) as t1
    FULL JOIN
    (
        SELECT atm, COUNT(*) as count
        FROM `table`
        WHERE event = 'Card in'
        GROUP BY ATM
    ) as t2
    ON t1.ATM = t2.ATM
    WHERE t1.COUNT > t2.COUNT
)
ORDER BY date
ORDER BY atm

这个查询的作用是首先计算每个ATM有多少卡片输出事件,然后计算每个atm的事件卡数量,并列出所有具有卡片输出事件而不是卡片事件的atm。然后使用有缺陷的atm列表列出所有相应的卡和卡出事件。

排序顺序将按照atm的顺序放置列表,并在每个atm内,按日期排序。然后,您可以使用该列表检查复制卡输出事件的位置,方法是在事件之前使用卡消除每个卡片输出事件。目前我不知道如何在SQL中执行此操作,但我可以使用其他编程语言轻松完成此操作。