設置你的窺視,確定他們的下一個出生日期(可以在下一個日曆年),顯示在未來30天有生日的人。工作在一年包裝(在12月)結束,等
http://sqlfiddle.com/#!2/d881b/4
create table peeps
(id int not null auto_increment,
lastname varchar(40) not null,
birthdate datetime not null,
primary key (id)
);
insert peeps (lastname,birthdate) values ('sam', '1973-01-01');
insert peeps (lastname,birthdate) values ('julie', '1973-02-01');
insert peeps (lastname,birthdate) values ('kim', '1973-03-01');
insert peeps (lastname,birthdate) values ('fred', '1973-04-01');
insert peeps (lastname,birthdate) values ('oscar1', '1973-05-01');
insert peeps (lastname,birthdate) values ('oscar2', '1973-05-02');
insert peeps (lastname,birthdate) values ('oscar3', '1973-05-04');
insert peeps (lastname,birthdate) values ('oscar4', '1973-05-06');
insert peeps (lastname,birthdate) values ('oscar5', '1973-05-08');
insert peeps (lastname,birthdate) values ('oscar6', '1973-05-10');
insert peeps (lastname,birthdate) values ('oscar7', '1973-05-12');
insert peeps (lastname,birthdate) values ('oscar8', '1973-05-14');
insert peeps (lastname,birthdate) values ('oscar9', '1973-05-16');
insert peeps (lastname,birthdate) values ('oscar10', '1973-05-18');
insert peeps (lastname,birthdate) values ('oscar11', '1973-05-20');
insert peeps (lastname,birthdate) values ('oscar12', '1973-05-22');
insert peeps (lastname,birthdate) values ('oscar13', '1973-05-24');
insert peeps (lastname,birthdate) values ('Felix the Cat1', '1973-06-01');
insert peeps (lastname,birthdate) values ('Felix the Cat2', '1973-06-05');
insert peeps (lastname,birthdate) values ('Felix the Cat3', '1973-06-07');
insert peeps (lastname,birthdate) values ('Bonehead7', '1973-07-01');
insert peeps (lastname,birthdate) values ('Bonehead8', '1973-08-01');
insert peeps (lastname,birthdate) values ('Bonehead9', '1973-09-01');
insert peeps (lastname,birthdate) values ('Bonehead10', '1973-10-01');
insert peeps (lastname,birthdate) values ('Bonehead11', '1973-11-01');
insert peeps (lastname,birthdate) values ('Bonehead12', '1973-12-01');
create table peeps_next_birthday
(id int not null,
next_birthdate datetime not null
);
insert into peeps_next_birthday (id,next_birthdate) select id,birthdate from peeps;
UPDATE peeps_next_birthday set next_birthdate=date_add(next_birthdate, interval (year(curdate())-year(next_birthdate)) year);
update peeps_next_birthday set next_birthdate=date_add(next_birthdate,interval 1 year)
where curdate()>next_birthdate;
/// *************************** now show the birthdays in the coming 30 days
select t2.id,t2.lastname,t1.next_birthdate
from peeps_next_birthday t1
join peeps t2
on t2.id=t1.id
where datediff(t1.next_birthdate,curdate())<=30
另請參閱http://stackoverflow.com/questions/970615/sql-that-list-all-birthdays-within-the-next-and-previous-14-days?lq=1,http:// stackoverflow .com/questions/3783286 /即將到來的生日-MySQL和php等(雖然沒有標記爲重複,因爲我沒有看到任何好的答案) – 2013-05-11 23:51:10
你的意思是儘管事實上我解決了它一個小時前:> – Drew 2013-05-12 00:22:15
@NSNolan。那是不正確的。看看輸出。它會爲每個人找到他們的下一個生日將會是什麼,並列出他們如果他們在未來30天 – Drew 2013-05-12 00:50:35