引自免费微信小程序:皆我百晓生
为了实现上述功能,可以使用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)来查询满足条件但未匹配到对应记录的数据。通过比较两条记录的类型和创建时间,可以筛选出符合要求的数据。注意,上述语句仅给出了查询语句,具体实现时需要根据实际情况进行调整和优化。
另外,你提到数据量有几百万条,对于大规模数据的查询,可以考虑对表添加适当的索引来提高查询性能。