Sqlite通过按组联合联接2个表

时间:2018-12-17 06:36:47

标签: sqlite

我有一个数据表“ 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

2 个答案:

答案 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;