Sqlite Соединение 2 таблиц через объединение по группам - PullRequest
0 голосов
/ 17 декабря 2018

У меня есть таблица данных "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
Shop    Manager    Sales    Date
1       A          101      20181217
1       B          121      20181217

Я могу сделать это с помощью union for 1 shop & 1 manager.

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 голосов
/ 17 декабря 2018

Если я правильно понял после отправленных вами образцов данных:

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;
0 голосов
/ 17 декабря 2018

Если вы можете сделать это с одним магазином и одним менеджером, вы можете сделать это для всех.В вашем примере запроса есть ограничение: where Shop = 1 and Manager = 'A'.

Если вы избавитесь от этого (везде), у вас есть только одно препятствие: «объединить» cleantable с датируемыми в запросе UNION.Как ты мог это сделать?Что-то вроде where cleantable.shop = datatable.shop AND cleantable.manager = datatable.manager в подзапросе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...