2016-09-21 72 views
0

这会拉回昨天和今天的两个int值。我想从第三栏中的差异中减去声明中的两个结果:如何从该语句中的SELECT语句中减去两个结果?

SELECT (
SELECT COUNT(*) 
FROM collectors_users 
WHERE DATE(dateadded) = CURDATE() - INTERVAL 1 DAY 
) AS yesterday, COUNT(*) AS today 
FROM collectors_users 
WHERE DATE(dateadded) = CURDATE() 

回答

1

您需要重复表达式。 SQL(通常)不允许您在相同的SELECT中重新使用列别名。您可以简化逻辑:

SELECT SUM(DATE(dateadded) = CURDATE() - INTERVAL 1 DAY) AS yesterday, 
     SUM(DATE(dateadded) = CURDATE()) as today, 
     (SUM(DATE(dateadded) = CURDATE()) - 
     SUM(DATE(dateadded) = CURDATE() - INTERVAL 1 DAY) 
     ) as diff 
FROM collectors_users 
WHERE dateadded >= CURDATE() - INTERVAL 1 DAY AND 
     dateadded < CURDATE() + INTERVAL 1 DAY; 

注意,对于WHERE条款的逻辑覆盖两天。此外,它不使用DATE()。这将允许查询使用索引(如果可用)。