目标是查询审计表中的名称更改。我只想选择包含名称更改的行。
我想比较每个唯一KEYNAME
auditkey
中的值。
因此,我希望将这两个最高记录按行80和行上的唯一auditkey
分组。 81.然后我想比较第80行和第81行的值。如果值不同,我只想选择第二行(afterupdate)。
我正在使用SQL Server 2008.
我以为我可以这样做:
select distinct AUDITKEY, KEYNAME
from dbo.CONSTITUENTAUDIT
进入临时表,然后对临时表中的auditkey列运行计数。任何有计数的东西> 1是我正在寻找的。 p>
答案 0 :(得分:1)
您可以自行加入表格:
SELECT a.* FROM dbo.CONSTITUENTAUDIT a
JOIN dbo.CONSTITUENTAUDIT b
ON a.AUDITKEY = b.AUDITKEY and a.AUDITTYPE <> b.AUDITTYPE
and a.AUDITTYPE = 'AFTER UPDATE' and a.KEYNAME <> b.KEYNAME
它应该按你提出的方式工作。
答案 1 :(得分:1)
你可以JOIN
一张桌子(自我加入)。因此,只提取Product::find()->where(['metrics' => 'kg', ['<', ['quantity' => $quantity]]])
->orWhere(['metrics'=> 'lbs', ['<', ['quantity' => $quantity * 2.2]]])
->all();
(更新后)与AUDITTYPE = 1
不同的记录,而不是具有相同KEYNAME
但AUDITKEY
MS SQL Server 2008架构设置:
AUDITTYPE = 0
查询1 :
CREATE TABLE Table1
([AUDITKEY] varchar(36), [AUDITTYPE] int, [AUDITTYPECODE] varchar(13), [KEYNAME] varchar(9))
;
INSERT INTO Table1
([AUDITKEY], [AUDITTYPE], [AUDITTYPECODE], [KEYNAME])
VALUES
('12345678-1234-1234-1234-123456789012', 0, 'before update', 'BLABLABLA'),
('12345678-1234-1234-1234-123456789012', 1, 'after update', 'BLABLABLA'),
('22345678-1234-1234-1234-123456789012', 0, 'before update', 'BLABLA'),
('22345678-1234-1234-1234-123456789012', 1, 'after update', 'ALBALB')
;
<强> Results 强>:
SELECT T2.AUDITKEY, T2.KEYNAME
FROM Table1 T1
INNER JOIN Table1 T2 ON T1.AUDITKEY = T2.AUDITKEY AND
T1.AUDITTYPE = 0 AND T2.AUDITTYPE = 1 AND
T1.KEYNAME <> T2.KEYNAME