sqlite - Sqlite通过Union by Groups加入2个表
问题描述
我有一个每天更新的数据表“数据表”。
DATATABLE
Shop Manager Sales Date
1 A 100 20181217
1 B 120 20181217
2 C 110 20181217
2 D 105 20181217
1 A 100 20181218
数据会定期清理并放入具有相同列的“可清理”中。我正在尝试创建一个合并这两个表的视图表,并在可用时为我提供已清理的数据,否则为未清理的数据。
CLEANTABLE
Shop Manager Sales Date
1 A 101 20181217
1 B 121 20181217
我可以通过工会为 1 家商店和 1 位经理做到这一点。
select * from cleantable where Shop = 1 and Manager = 'A'
union
select * from datatable where Shop = 1 and Manager = 'A' where Date >
(select max(Date) from cleantable where Shop = 1 and Manager = 'A')
每个商店和经理的清洁日期是不同的。
是否有一种简单的方法可以编写一个处理所有商店/经理组合的查询。
理想情况下,如果特定的商店/经理组合没有干净的数据,它也应该工作。
DESIRED OUTPUT
Shop Manager Sales Date
1 A 101 20181217
1 B 121 20181217
2 C 110 20181217
2 D 105 20181217
1 A 100 20181218
解决方案
如果您可以与一家商店和一位经理一起做,那么您可以为所有人做这件事。示例查询中的限制是where Shop = 1 and Manager = 'A'
.
如果您摆脱了它(无处不在),那么您只有一个障碍:在 UNION 查询中将可清洁表与数据表“加入”。你怎么能那样做?类似于子查询中的东西where cleantable.shop = datatable.shop AND cleantable.manager = datatable.manager
。
推荐阅读
- c# - 将 SessionId 转换为用户帐户 SID _without_ WTSQuerySessionInformation?
- swift - 当从不同的类调用更改时,UIView IBOutlet 不会更改
- python - 如何使用 Pillow 操作 discord.py 上的图像?
- javascript - 编辑 vs 代码的语法以模拟 Codecademy
- python - Wiskerplots 不够清晰,无法分析数据
- python - 我正在尝试将 a 附加到现有文件中。为什么我需要使用.write 使用.append 时会报错
- python-3.x - 如何检查类型提示是否与代码中的 Iterable 兼容?
- symfony5 - Cannot autowire service RefreshedTokenListener: argument "$ttl" of method construct() is type-hinted "int", you should configure its value explicitly
- vue.js - vuejs动态绑定类属性中的文本
- asp.net-mvc - 如何使用代码优先在 asp.net-mvc 中创建登录页面