sql - 查找具有相似日期值的行

标签 sql postgresql postgresql-9.4

我想找到客户,例如,系统错误地注册了订单的重复项。

这很简单,如果 reg_date 完全相同,但我不知道如何在查询中实现它以计为重复,例如,如果事务之间最多有 1 秒的差异。

select * from
(select customer_id, reg_date, count(*) as cnt

 from orders

group by 1,2

) x where cnt > 1

这是示例数据集: https://www.db-fiddle.com/f/m6PhgReSQbVWVZhqe8n4mi/0

目前只有客户的 104 个订单被算作重复,因为它的 reg_date 是相同的,我也想计算订单 1,2 和 4,5,因为只有 1 秒的差异

最佳答案

demo:db<>fiddle

SELECT
    customer_id,
    reg_date
FROM (
    SELECT
        *,
        reg_date - lag(reg_date) OVER (PARTITION BY customer_id ORDER BY reg_date) <= interval '1 second' as is_duplicate
    FROM
        orders
) s
WHERE is_duplicate

使用lag() window function .它允许查看以前的记录。使用此值,您可以进行 diff 并过滤 diff 时间超过一秒的记录。

关于sql - 查找具有相似日期值的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56112039/

相关文章:

sql - 在不删除关联序列的情况下删除 PostgreSQL 中的表

c - 使用 Eclipse CDT 和 GDB 调试 Postgresql 9.3

postgresql - 如何在 Odoo 8 中创建 One2one 关系?

sql - 选择查询需要更长的时间才能返回结果

python - 这个 SQL 语句有 django ORM 版本吗?

mysql - 输入多个外键时无法在 SQL 中创建表

.net - 哪个更快 : Working from memory or lots of queries?

mysql - 使用连接创建 View

MySQL : on creating foreign key geting error no : 150

mysql - 数据库服务器、分区和实例