我有一个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