gpt4 book ai didi

sql - 查询以查找今天和昨天的数据以及伪列之间的差异

转载 作者:行者123 更新时间:2023-12-03 07:54:28 26 4
gpt4 key购买 nike

有一个表存储每天的帐户数据。我想找出今天和昨天的数据差异。创建表和插入语句的查询如下:

CREATE TABLE daily_account_data (id varchar(6), Name varchar (20), DS_DW_Id varchar(4), flag_1 varchar(5), flag_2 varchar(5), Insert_date date );

INSERT INTO daily_account_data VALUES('A01R11', 'Gene Graham', 'PT12', 'TRUE', 'FALSE', '2023-06-01');
INSERT INTO daily_account_data VALUES('A01R16', 'Molly Ringwald', 'PT15', 'TRUE', 'TRUE', '2023-06-01');
INSERT INTO daily_account_data VALUES('A01R19', 'John Doe', 'PT24', 'FALSE','TRUE', '2023-06-01');
INSERT INTO daily_account_data VALUES('A01R34', 'Jane Doe', 'PT26', 'TRUE', 'FALSE', '2023-06-01');
INSERT INTO daily_account_data VALUES('A01R11', 'Gene Wilder', 'PT12', 'TRUE', 'FALSE', '2023-06-02');
INSERT INTO daily_account_data VALUES('A01R16', 'Molly Ringwald', 'PT15', 'TRUE', 'TRUE', '2023-06-02');
INSERT INTO daily_account_data VALUES('A01R19', 'John Doe', 'PT24', 'TRUE', 'TRUE', '2023-06-02');
INSERT INTO daily_account_data VALUES('A01R34', 'Jane Doe', 'PT26', 'TRUE', 'FALSE', '2023-06-02');

我有一个查询来查找这两天数据的差异。

SELECT id, name, DS_DW_Id, flag_1, flag_2 FROM daily_account_data WHERE Insert_date = '2023-06-02'
EXCEPT
SELECT id, name, DS_DW_Id, flag_1, flag_2 FROM daily_account_data WHERE Insert_date = '2023-06-01';

但我无法弄清楚如何获取伪列中的数据。最后一列是更改的数据。 6 月 1 日的数据显示,A01R11 的 ID 为 Gene Graham,6 月 2 日的数据为 Gene Wilder。伪列应显示“名称更改”。

类似地,对于 id A01R19 (John Doe),flag_1 的值已更改为 TRUE。伪列应显示“flag_1 change”。

输出应如下所示:

<表类=“s-表”><标题>id姓名DS_DW_Idflag_1flag_2数据更改 <正文>A01R11吉恩·怀尔德PT12正确错误名称更改A01R19约翰·多伊PT24正确正确flag_1 更改

最佳答案

您可以连接表格并减去日期。如果记录的顺序正确(前一天必须是前一条记录,可以使用窗口函数(LEAD ))

select 
a.id
,a.Name
,a.DS_DW_Id
,a.flag_1
,a.flag_2

,iif(a.Name=b.Name ,'',' Name Change')
+iif(a.DS_DW_Id=b.DS_DW_Id ,'',' DS_DW_Id Change')
+iif(a.flag_1=b.flag_1 ,'',' flag_1 Change')
+iif(a.flag_2=b.flag_2 ,'',' flag_2 Change') AS [Data Change]

from daily_account_data a
inner join(
select *
from daily_account_data b
)b on a.id=b.id
and DATEADD(day,-1, b.Insert_date)=a.Insert_date
where a.Name<>b.Name
or a.DS_DW_Id<>b.DS_DW_Id
or a.flag_1<>b.flag_1
or a.flag_2<>b.flag_2

关于sql - 查询以查找今天和昨天的数据以及伪列之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76397886/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com