sql - 如何选择值已更改的行、某个日期的新项目或从前一个日期离开的项目
问题描述
好的,我能够独立实现这个问题的一部分,但我似乎无法将它们结合起来。
我的桌子看起来像这样
THING | ID1 | ID2 | VALUE | DATE
-------------------------------------
thing1 | a1 | 1a | 5 | 20190605
thing2 | a2 | 2c | 10 | 20190605
thing4 | a5 | 3x | 7 | 20190605
thing1 | a1 | 1a | 6 | 20190606
thing2 | a2 | 2c | 10 | 20160606
thing3 | a3 | 2b | 3 | 20160606
但是每天有数千个元素和八九个标识符,但是一旦我们找到解决方案,我就可以推断出来。
我希望能够返回任何VALUE
一天都发生变化的元素,或者是前一天不存在的新元素。我还希望能够看到前一天的值是多少,所以NULL
如果它不存在应该是,如果它存在应该是前一天的值。我也想以同样的方式看到,前一天存在的元素今天不再存在。我的查询结果将是表上的某种外部连接和EXISTS
某处的检查......
查询将从上表返回,如下表。
THING | ID1 | ID2 | VALUE | YDAY_VALUE | DATE
--------------------------------------------------
thing1 | a1 | 1a | 6 | 5 | 20190606
thing4 | a5 | 3x | NULL | 7 | 20190606
thing3 | a3 | 2b | 3 | NULL | 20190606
我可以通过检查三件事中的任何一件来做到这一点,但我束手无策,试图把它们锁起来。
谢谢你们的帮助。它总是很受欢迎。
解决方案
你似乎想要一个join
:
select t.*, tprev.value as prev_value
from t full join
t tprev
on t.thing = tprev.thing and
t.id1 = tprev.id1 and
t.id2 = tprev.id2 and
t.date = dateadd(day, 1, tprev.date)
where tprev.thing is null or
tnext.thing is null or
tprev.value <> t.value;
推荐阅读
- python - 如何使图像随机出现和消失?
- sql - 有条件地在其他列上从配置单元表中获取最新列值
- elasticsearch - ES 不同分数查询 vs query_string
- kentico - 安装 Kentico 后无法使用默认用户名管理员登录
- python-3.x - 登录网站,然后在 Python3 中的 BeautifulSoup4 中获取 asp 数据
- chef-infra - 在厨师的 RUBY 块中记录错误
- javascript - 阻止现场在线跟踪
- php - 如何在 Codeigniter Php 中获取 JSON 的特定字段值?
- javascript - 引导日期选择器未显示在日期字段中
- hadoop - 不兼容的clusterID Hadoop swarm