我建議你把你的查詢分成兩個單獨的查詢,一個測試table1
日期,另一個測試table2
日期。然後你可以使用UNION ALL
來合併它們,這應該產生你所要求的行爲。
樣品:
SELECT t1.Data1, ...
FROM Table1 t1
INNER JOIN Table2 t2 ON ...
WHERE t1.Created_at BETWEEN '2014-10-02 00:00:00 UTC' AND '2014-10-02 23:59:59 UTC'
UNION ALL
SELECT t1.Data1, ...
FROM Table1 t1
INNER JOIN Table2 t2 ON ...
WHERE t2.Created_at BETWEEN '2014-10-02 00:00:00 UTC' AND '2014-10-02 23:59:59 UTC'
編輯
根據你的榜樣,我會做這樣的事情:
SELECT COUNT(*) AS count_all,
users.id AS users_id
FROM
(
SELECT users.id
FROM "users"
LEFT JOIN table1 ON table1.col1_id = cols1.id
LEFT JOIN table2 ON table2.col2_id = cols2.id
WHERE "users"."role_id" IN (1,2,4,5,6,7,8)
AND table1.created_at BETWEEN '2014-09-27 00:00:00 UTC' AND '2014-10-03 23:59:59 UTC'
UNION ALL
SELECT users.id
FROM "users"
LEFT JOIN table1 ON table1.col1_id = cols1.id
LEFT JOIN table2 ON table2.col2_id = cols2.id
WHERE "users"."role_id" IN (1,2,4,5,6,7,8)
AND table2.created_at BETWEEN '2014-09-27 00:00:00 UTC' AND '2014-10-03 23:59:59 UTC'
)
GROUP BY users.id
PostgreSQL。更新標籤,thx – TiSer 2014-10-03 14:52:56
更改將條件從'和'連接到'或'的邏輯。 – 2014-10-03 14:54:42