У меня есть таблица посещений
ssn,eno,date
302609074,101,20180215
302609074,102,20181010
302609074,105,20190505
302609074,105,20190506
997600970,103,20190115
997600970,105,20190415
997600970,104,20181212
997600970,104,20181213
874136439,102,20190808
874136439,102,20190910
874136439,102,20191001
874136439,102,20191002
и таблица результатов
ssn,date,scode,dcode,ppay,ipay
302609074,20180215,4002,1001,25,35
302609074,20180215,4006,1003,40,100
302609074,20181010,4002,1001,25,35
302609074,20181010,4006,1003,40,100
302609074,20190505,4002,1001,25,35
302609074,20190506,4006,1003,40,100
997600970,20190115,4001,1002,25,50
997600970,20190115,4001,1003,40,30
997600970,20190115,4004,1004,40,50
997600970,20190415,4002,1004,40,95
997600970,20190415,4003,1005,40,100
997600970,20181212,4004,1001,25,47
997600970,20181213,4004,1001,25,47
874136439,20190808,4002,1002,25,50
874136439,20190808,4002,1003,40,60
874136439,20190910,4002,1004,40,95
874136439,20190910,4002,1005,60,90
874136439,20191001,4003,1002,25,50
874136439,20191002,4003,1002,25,50
Мне нужно получить общее количество посещений в определенном диапазоне дат, и мне нужно объединить посещения и результаты, чтобы получить (например) сумму ipay для результатов в те же даты.
Я получил свой запрос следующим образом:
SELECT X.NumberOfVisits, SUM(Y.ipay) TotalIPay
FROM (
(SELECT *, COUNT(*) NumberOfVisits
FROM visit
WHERE (vdate >=20190101 AND vdate <=20190331)
) X
JOIN
(SELECT *
FROM outcome
) Y
ON (X.vdate = Y.vdate)
);
И это не работает.
Если я разделю запрос на отдельные запросы:
SELECT X.OverallNumberOfVisits
FROM (
(SELECT COUNT(*) OverallNumberOfVisits
FROM visit
WHERE (vdate >=20190101 AND vdate <=20190331)
) X
);
и
SELECT SUM(Y.ipay) TotalIPay
FROM (
(SELECT *
FROM visit
WHERE (vdate >=20190101 AND vdate <=20190331)
) X
JOIN
(SELECT *
FROM outcome
) Y
ON (X.vdate = Y.vdate)
);
Тогда это работает. Но я не хочу этого делать. Я хочу сделать это в одном запросе. Как правильно их комбинировать?