我想显示如下的查询结果:
| 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 :(得分: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 |
我再次假设这不是你想要的......
我认为以您希望的方式表示数据不是最好的主意......
答案 1 :(得分:0)
您可以使用以下查询此查询可以帮助您,
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()));
您还可以通过首先选择一年和上一年来优化此查询