Создайте СУММУ значений полей из 2 таблиц, но выберите самую последнюю дату (из любой таблицы) - PullRequest
0 голосов
/ 25 октября 2019

У меня есть две таблицы с одинаковыми типами столбцов: host, frequency и date.

host - это первичный ключ.

Я хочутак, чтобы я мог объединить таблицу, скажем, с марта по апрель и суммировать их частоты.

Вот что я должен ожидать в своем окончательном выводе.

  • Пусть X будет некоторым значением первичного ключа host.
  • Если X существует только в одной таблицеиспользуйте эту строку в конечном результате.
  • Если X существует в обеих таблицах. Суммируйте обе строки freq и выберите самую последнюю date. Так что если мы должны были сравнить между 4/20/19 и 4/2/19, то 4/20/19 должна быть выбрана дата.

Предположим, у меня были следующие таблицы:

  • Таблица: Report_4.1.19

host    freq    date
A       15      4/1/2019
C       30      4/1/2019
  • Таблица: Report_3.1.19

host    freq    date
A       10      3/1/2019
B       20      3/1/2019

Мой идеальный вывод должен быть следующим:

  • Таблица: результат

host    sum(freq)   date
A       25          4/1/2019
B       20          3/1/2019
C       30          4/1/2019

Вот что я попробовал до сих пор:

SELECT host,sum(freq),date
from
(
   select
        host,
        freq,
        date
    from Report_4.1.19
    union 
    select
        host,
        freq,
        date
    from Report_3.1.19

)
group by host

Несмотря на то, что мой код действительно достигает желаемого результата, я не уверен, правильно ли я учелдля выбора даты. Что я могу сделать, чтобы изменить свой код (при необходимости)?

Ответы [ 2 ]

0 голосов
/ 25 октября 2019

Ваш запрос почти правильный. Просто используйте максимальный столбец даты в вашем союзе.

SELECT host,sum(freq),max(date)
from
(
   select
        host,
        freq,
        date
    from Report_4.1.19
    union 
    select
        host,
        freq,
        date
    from Report_3.1.19

)
group by host

Примечание. Если вы хотите получать ежедневные суммы, вы должны использовать дату напрямую, а затем добавить дату в группу по предложению.

0 голосов
/ 25 октября 2019

Шаг первый: используйте формат даты, поддерживаемый sqlite функциями даты и времени , поскольку их можно упорядоченно упорядочить и сравнить, в отличие от того, что у вас есть. YYYY-MM-DD работает.

Шаг второй: используйте одну таблицу для всех отчетов (вы уже отслеживаете дату в виде столбца, чтобы разделить их!), Чтобы упростить задачу и использовать сильные стороны реляционных баз данных. Сделайте PK host, date вместо просто host.

Шаг третий: тогда он становится простым запросом:

SELECT host, sum(freq), max(date) AS date
FROM reports
GROUP BY host
ORDER BY host;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...