我有2个表,其值如下所示:
**tbl_users**
user_ID name
1 somename1
2 somename2
3 somename3
**tbl_interviews**
int_ID user_ID answer date
1 1 sometextaba 2012-11-04
2 2 sometextxcec 2012-10-05
3 1 sometextabs 2011-06-04
4 3 sometextxcfc 2012-11-04
5 3 sometextxcdn 2012-11-04
现在......我应该算一下今年和前几年接受采访的人。 不幸的是我甚至无法选择它们..我正在尝试这样的东西..但它不起作用(不会抛出语法错误但是给出一个空的结果):
SELECT * FROM interviews WHERE ('YEAR(date) = 2012' AND 'YEAR(date) < 2012')
答案 0 :(得分:1)
您无法匹配两个条件。你的意思是 条件
SELECT * FROM interviews WHERE ('YEAR(date) = 2012' OR 'YEAR(date) < 2012');
但更好,使其成为SARGable
SELECT * FROM interviews WHERE date < '2013-01-01');
SELECT * FROM interviews WHERE date < CONCAT('''', YEAR(CURDATE()), '-01-01''');
答案 1 :(得分:0)
尝试类似
的内容SELECT * FROM interviews WHERE YEAR(date) <= YEAR(GETDATE())
GETDATE()基本上为您提供当前日期。
现在,如果您计算一下受访者的数量,那将会是这样的
SELECT COUNT(DISTINCT(id)) FROM interviews WHERE YEAR(date) <= YEAR(GETDATE())
答案 2 :(得分:0)
试试这个
select * from tbl_interviews where year(date)<='2012'
答案 3 :(得分:0)
您的查询应该只是:
SELECT COUNT(DISTINCT user_id)
FROM tbl_interviews
说明:你的问题是:“我应该算上今年和前几年接受采访的人。”
首先,这一部分:“今年和前几年”是指今年以及今年之前每年接受采访的人。由于您将来不能进行任何面试,这实际上意味着无论一年中的所有面试。
如果这不是你的意思,那么请重新提出你的问题。 (我有个主意,见下文)
至于“我应该算上人”,我认为这意味着你想要计算每个被采访的人,不管他们做了多少次采访。这是通过简单地计算唯一的user_id来完成的,这是用COUNT(DISTINCT(user_id))
完成的。现在,关于你的“今年和前几年”,也许你的意思是:
“我希望看到我们今年采访的用户数量,以及我们今年之前采访的用户数量”,然后查询将是:
SELECT (
SELECT COUNT(DISTINCT user_id)
FROM tbl_interviews
WHERE date >= CONCAT(YEAR(current_date()), '-01-01')
) thisyear
, (
SELECT COUNT(DISTINCT user_id)
FROM tbl_interviews
WHERE date < CONCAT(YEAR(current_date()), '-01-01')
) previousyears