微笑【の】鱼 2024-01-22 22:53 采纳率: 14.3%
浏览 11
已结题

java代码及sql实现业务

有个A表有几个字段

idnumbercodetypecreateTime
主键单号经过站点类型创建时间

1、当type=rcf 且创建时间一天后没有收到type=nfd的数据就查出来
比如number=1 type=rcf的数据 一天后如果有收到type=nfd的数据 表就会增加一条number=1 type=nfd的数据
2、当type=rcf 且创建时间两天后没有收到type=dep的数据就查出来
3、当type=nfd 且创建时间三天后没有收到type=dlv的数据就查出来
4、当type=dep 且创建时间两天后没有收到type=rcf的数据就查出来
如何用sql实现这个功能 表数据有几百万条 最好能用一条sql实现

  • 写回答

21条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-01-22 22:54
    关注

    引自免费微信小程序:皆我百晓生

    为了实现上述功能,可以使用SQL语句来查询符合条件的数据。下面是对应每个要求的SQL查询语句:

    1、当type=rcf 且创建时间一天后没有收到type=nfd的数据就查出来

    SELECT a.*
    FROM A a
    LEFT JOIN A b ON a.number = b.number AND b.type = 'nfd' AND b.createTime > DATE_ADD(a.createTime, INTERVAL 1 DAY)
    WHERE a.type = 'rcf'
    AND b.id IS NULL;
    

    2、当type=rcf 且创建时间两天后没有收到type=dep的数据就查出来

    SELECT a.*
    FROM A a
    LEFT JOIN A b ON a.number = b.number AND b.type = 'dep' AND b.createTime > DATE_ADD(a.createTime, INTERVAL 2 DAY)
    WHERE a.type = 'rcf'
    AND b.id IS NULL;
    

    3、当type=nfd 且创建时间三天后没有收到type=dlv的数据就查出来

    SELECT a.*
    FROM A a
    LEFT JOIN A b ON a.number = b.number AND b.type = 'dlv' AND b.createTime > DATE_ADD(a.createTime, INTERVAL 3 DAY)
    WHERE a.type = 'nfd'
    AND b.id IS NULL;
    

    4、当type=dep 且创建时间两天后没有收到type=rcf的数据就查出来

    SELECT a.*
    FROM A a
    LEFT JOIN A b ON a.number = b.number AND b.type = 'rcf' AND b.createTime > DATE_ADD(a.createTime, INTERVAL 2 DAY)
    WHERE a.type = 'dep'
    AND b.id IS NULL;
    

    以上SQL语句使用了左连接(LEFT JOIN)来查询满足条件但未匹配到对应记录的数据。通过比较两条记录的类型和创建时间,可以筛选出符合要求的数据。注意,上述语句仅给出了查询语句,具体实现时需要根据实际情况进行调整和优化。

    另外,你提到数据量有几百万条,对于大规模数据的查询,可以考虑对表添加适当的索引来提高查询性能。

    评论

报告相同问题?

问题事件

  • 系统已结题 1月30日
  • 修改了问题 1月22日
  • 创建了问题 1月22日