在excelvba中使用sql查找pgsql表中所做的更改

q7solyqu  于 2021-08-13  发布在  Java
关注(0)|答案(1)|浏览(343)

是否可以创建一个sql查询来比较单个表中的一个字段,以查看是否进行了更改,如果可能的话,还可以列出之前和之后的列表?
我用excel2010vba编写了以下sql查询,它连接到oraclepostgresql数据库

Dim au As String

au = "SELECT id, priority, flag, code " _
    & "FROM hist WHERE ( aud_dt >= '18/05/2020' AND aud_dt <='18/05/2020' ) " _

Set rs = conn.Execute(au)
With ActiveSheet.QueryTables.Add(Connection:=rs, Destination:=Range("A1"))
    .Refresh
End With

其中字段包括:
“priority”是我想检查的字段,它是一个0-9之间的数字
“代码”是被赋予优先权的记录,由数字和字母组成,最多7个字符
“flag”显示1为活动记录,2为已编辑记录
“id”是指用户帐户
我最理想的结局是: id | priority | flag | priority_old | flag_old | code 它应该显示优先级更改前后的变化。如果记录显示 priority=3 and flag=2 and code=Ab12 ,也必须有带1标志的记录,因为现在是活动记录。如果它对代码有相同的优先级,我对它不感兴趣,因为这只是意味着其他内容被更改了,因为我没有列出所有的列字段。
如果活动记录现在显示 priority=4, flag=1 and code=Ab12 ,那正是我要看的唱片。

xoefb8l8

xoefb8l81#

考虑一个自连接查询(可能需要在 WHERE 取决于项目更改的时间):

SELECT h1.id, h1.priority, h1.flag, 
       h2.priority AS priority_old, h2.flag AS flag_old, h1.code
FROM hist h1
LEFT JOIN hist h2 
  ON h1.code = h2.code
  AND h1.priority <> h2.priority
  AND h1.flag = 1
  AND h2.flag <> 1
WHERE (aud_dt >= '2020-05-18' AND aud_dt <='2020-05-18')

相关问题