Самостоятельное соединение для объединения двух столбцов даты с столбцами группового подсчета для обеих дат - PullRequest
0 голосов
/ 19 июня 2020

У меня есть столбцы «Дата запроса» и «Дата получения». Они похожи, но не одинаковы. В настоящее время я использую два отдельных запроса и pandas для объединения двух фреймов данных. Я запускаю это в Flask с помощью SQLAlchemy, поэтому все в WHERE будут переданы переменные. Я использую метод text (), чтобы просто запустить raw SQL после того, как протестировал его в браузере БД. Я напортачил, но не добился никакого прогресса, пытаясь получить желаемый результат, используя только sql.

SELECT r.PUDate, COUNT(r.PUDate) as trips
FROM requests r
WHERE PULoc IN ("list of location ID's")
AND r.'TO' IN ("list of requestors")
AND ReqDate >= '2014-01-01'
AND ReqDate <= '2019-12-31'
AND PUDate >= '2014-01-01'
AND PUDate <= '2019-12-31'
GROUP BY PUDate
ORDER BY PUDate;
SELECT r.ReqDate, COUNT(r.ReqDate) as reqs
FROM requests r
WHERE PULoc IN ("list of location ID's")
AND r.'TO' IN ("list of requestors")
AND ReqDate >= '2014-01-01'
AND ReqDate <= '2019-12-31'
AND PUDate >= '2014-01-01'
AND PUDate <= '2019-12-31'
GROUP BY PUDate
ORDER BY PUDate;

Желаемый результат, который я получил в pandas, - это столбец даты с уникальным список дат из 2 столбцов даты. Затем запросите столбцы счетчика и счетчика сбора с нулями вместо нулей, поскольку некоторые даты уникальны для одного столбца или другого. Подключается ли я к go по этому поводу или есть способ лучше?

1 Ответ

0 голосов
/ 19 июня 2020

Один из вариантов: union all:

select xDate, sum(trips) trips, sum(reqs) reqs
from (
    select PULoc, to, r.PUDate xDate, 1 trips, 0 reqs from requests r
    union all
    select PULoc, to, r.ReqDate, 0, 1 from requests r 
) t
where 
    PULoc in ("list of location ID's")
    and to in ("list of requestors")
    and xDate >= '2014-01-01'
    and xDate < '2015-01-01'
group by xDate
order by xDate;

Я переместил условия фильтрации во внешний запрос, чтобы его было легче написать. Я ожидал бы, что база данных должна быть в состоянии использовать sh предикаты вплоть до подзапросов, однако, если вы видите проблемы с производительностью, вы можете вместо этого повторить условия фильтрации в подзапросах.

...