我有一个数据表“ datatable”,每天都会更新。
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”中。我正在尝试创建一个合并这2个表的视图表,并在可用时为我提供已清除的数据,否则未清除。
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
答案 0 :(得分:0)
如果您可以在一家商店和一名经理那里做到这一点,那么您就可以做到全部。在示例查询中受限制的是where Shop = 1 and Manager = 'A'
。
如果您(在任何地方)都摆脱了这一障碍,那么您将只有一个障碍:在UNION查询中将cleantable与datatable“ join”在一起。你会怎么做?子查询中的where cleantable.shop = datatable.shop AND cleantable.manager = datatable.manager
之类的东西。
答案 1 :(得分:0)
如果我对您发布的示例数据了解得很好:
SELECT * FROM (
SELECT * FROM datatable d
WHERE d.Date > (
COALESCE((SELECT MAX(Date) FROM cleantable c WHERE c.Shop = d.Shop AND c.Manager = d.Manager), '')
)
UNION
SELECT * FROM cleantable)
ORDER BY Date, Shop, Manager;