2015-06-08 81 views
2

我要显示这样的查询结果:如何显示MYSQL查询结果column_1今年查询,column_2查询一年前?

| Who_was_born_this_year | Who_was_born_year_ago | 
___________________________________________________ 
|  x     | y     |  
|  x     | y     | 

其中x将显示谁出生在今年人姓名和y将显示谁天生一年前

百姓餐桌结构人名称:

ID people | ID Gender | Name | Birthday 
    _________________________________________ 
    1   | 1   | John | 18-07-2015 
    2   | 1   | Stu | 12-01-2014 
    3   | 2   | Leslie | 10-03-2014 

所有日期格式为DD-MM-YYYY

我怎么能与查询实现这一目标?

谢谢

回答

0

你可以试试这个:

SELECT 
    IF (YEAR(CURDATE()) = YEAR(Birthday), Name, '') Who_was_born_this_year, 
    IF (YEAR(CURDATE())-1 = YEAR(Birthday), Name, '') Who_was_born_year_ago 
From people 
; 

,但您会收到类似:

| Who_was_born_this_year | Who_was_born_year_ago | 
___________________________________________________ 
| John     |      | 
|       | Stu    | 
|       | Leslie    | 

,我想,这不是你想要的到底是什么?
但这是最好的情况,因为我们没有关键我们应该如何绑定今年和去年的数据......

或者:

SELECT 
(
    SELECT group_concat(Name) 
    FROM people 
    WHERE YEAR(CURDATE()) = YEAR(Birthday) 
) Who_was_born_this_year, 
(
    SELECT group_concat(Name) 
    FROM people 
    WHERE YEAR(CURDATE())-1 = YEAR(Birthday) 
) Who_was_born_year_ago 
; 

但在这种情况下,您会收到类似:

| Who_was_born_this_year | Who_was_born_year_ago | 
___________________________________________________ 
| John     |      | 
|       | Stu,Leslie   | 

,我再次想,这不是你想要的到底是什么?

我想以您希望的方式表示数据不是最好的想法......

0

您可以使用以下查询此查询可能hel p你,

SELECT 
    (CASE YEAR(Birthday) WHEN YEAR(curdate()) THEN name ELSE NULL END) as Who_was_born_this_year, 
    (CASE YEAR(Birthday) WHEN YEAR(curdate() - interval 1 year) THEN name ELSE NULL END) as Who_was_born_year_ago 
FROM people WHERE YEAR(Birthday)IN (YEAR(curdate() - interval 1 year),YEAR(curdate())); 

您还可以通过选择CURENT年和上年首先

优化这个查询