0

我有 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')
4

4 回答 4

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''');
于 2012-11-08T12:21:43.307 回答
0

尝试这个

select * from tbl_interviews where year(date)<='2012'
于 2012-11-08T12:24:03.727 回答
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
于 2012-11-08T12:24:55.423 回答
0

尝试类似的东西

SELECT * FROM interviews WHERE YEAR(date) <= YEAR(GETDATE())

GETDATE() 基本上为您提供当前日期。

现在,如果您要计算有多少人接受了采访,那将是这样的

SELECT COUNT(DISTINCT(id)) FROM interviews WHERE YEAR(date) <= YEAR(GETDATE())
于 2012-11-08T12:22:16.473 回答