我有一個SQL SELECT語句,其中包含多個連接其他獨立SQL語句的多個UNION ALL
關鍵字。如果沒有UNION ALL
關鍵字,查詢太複雜了。WHERE跨越多個UNION ALL語句
但是,我想限制所有的子查詢到一個特定的日期範圍,我不想寫在他們每個的末尾完全相同的where子句。有沒有辦法可以爲他們寫一個WHERE
條款?
我試過了下面的代碼,但它不起作用,因爲COUNT(*)
這個短語可以防止爲每個記錄過濾inputDate
列。另外從性能角度來看,如果有辦法做到這一點,最好先過濾日期列。
SELECT * FROM (
SELECT count(*), inputDate 'sel1' as name FROM tblName WHERE name IN ('n1','n2')
UNION ALL
SELECT count(*), inputDate, 'sel2' as name FROM tblName WHERE name IN ('n3','n4')
UNION ALL
SELECT count(*), inputDate, 'sel3' as name FROM tblName WHERE name IN ('n5','n6')
) names WHERE inputDate >= DATE_SUB(NOW(), INTERVAL 1 MONTH)
請參考這一個http://stackoverflow.com/questions/1266666/using-union-and-count-together-in- sql-query –
@AtaboyJosef這裏沒有討論我的關鍵問題 - 如何在多個'UNION ALL'語句中使用'WHERE'子句。解決問題的方式可能相似,但問題不是。 – user3413723