选择SQL以选择同一日期的下一个不匹配的记录

时间:2019-01-28 05:04:14

标签: tsql psql

我的表名为This is a source code of malloc() (maybe have a litter difference between kernel versions but concept still like this), It can answer your question: static void *malloc(int size) { void *p; if (size < 0) error("Malloc error"); if (!malloc_ptr) malloc_ptr = free_mem_ptr; malloc_ptr = (malloc_ptr + 3) & ~3; /* Align */ p = (void *)malloc_ptr; malloc_ptr += size; if (free_mem_end_ptr && malloc_ptr >= free_mem_end_ptr) error("Out of memory"); malloc_count++; return p; } ,唯一性,标识列为client_auditrecnoclientcodeauditdate,并且有其他多个列对于相同的客户代码,应进行更改并记录为审核之前和审核之后的图像。
Auditflag 1表示更改之前,auditflag 2表示更改之后。

如果我运行auditflag,则记录计数为30000100

如果我运行select * from client_audit where audit_flag = 1,则记录数为30000000

实际上,对于审计图像之后我没有的100条记录。

现在像以前一样select * from client_audit where audit_flag = 2成对创建记录,并且将创建审核映像,它们的clientcode将按顺序排列。

从同一个表中是否有任何方法可以获取那100条记录,这些记录仅在审计映像之前存在,而在审计映像之后则没有,考虑到recnumber是唯一的,并且同一客户代码和身份的审计记录将成对存在相同的recno

2 个答案:

答案 0 :(得分:0)

如果我正确理解了您的表结构,请尝试

select * from client_audit where audit_flag = 1 and clientcode not in (select clientcode from client_audit where audit_flag = 2)

答案 1 :(得分:0)

首先,一个免费提示:如果您要同时将两个记录插入数据库,则应使用事务处理,这样,如果其中一个插入失败,则两个记录都将并且您最终都不会得到孤立记录像你现在一样。

回答您的问题:
您可以使用不存在来获取所有记录,其中audit_flag = 1基于audit_flag = 2clientcode的{​​{1}}没有与auditdate对应的记录,如下所示:

select * 
from client_audit as c1
where audit_flag = 1
and not exists
(
    select 1 
    from client_audit as c2
    where audit_flag = 2
    and c1.clientcode = c2.clientcode
    and c1.auditdate = c2.auditdate
)