对此感到头疼:
我需要计算(*)现在和1天之前两个表中的行数,其中表1中的historyId!=表2中的historyId和userId =?。然后我需要返回两个表的所有行的总和。
如果表1中的historyId与表2中的historyId相等,则只需将其计为一行,而不是两行。
查询一个
SELECT HOUR(date) as hr, historyId, COUNT(*) as num_rows
FROM webHistory WHERE userId=? AND date BETWEEN (SYSDATE() - INTERVAL 1 DAY)
AND SYSDATE() GROUP BY HOUR(date);
查询两个
SELECT HOUR(date) as hr, historyId, COUNT(*) as num_rows
FROM locationHistory WHERE userId=? AND date BETWEEN (SYSDATE() - INTERVAL 1 DAY)
AND SYSDATE() GROUP BY HOUR(date);
我一直在看JOIN,但我完全陷入困境,不知道甚至要搜索下一个,更不用说冒险和测试的路线了。
答案 0 :(得分:1)
你可以在这里使用A UNION:
SELECT HOUR(date) as hr, historyId, COUNT(*) as num_rows
FROM webHistory WHERE userId=? AND date BETWEEN (SYSDATE() - INTERVAL 1 DAY)
AND SYSDATE() GROUP BY HOUR(date)
UNION
SELECT HOUR(date) as hr, historyId, COUNT(*) as num_rows
FROM locationHistory WHERE userId=? AND date BETWEEN (SYSDATE() - INTERVAL 1 DAY)
AND SYSDATE() GROUP BY HOUR(date);
答案 1 :(得分:1)
我认为你想使用union
:
select count(distinct historyid)
from (select hour(date) as hr, historyid
from webhistory
where userid = ? and date between sysdate() - interval 1 day and sysdate()
union all
select hour(date) as hr, historyid
from locationhistory
where userid = ? and date between sysdate() - interval 1 day and sysdate()
) t
group by hr;