修改了几个地方:
1. 加上测资
2. cross apply(join) 增加 curdate(今天日期)
3. 原 PO 推文里以星期日为第 1 天
select t1.*
from (
values
('2000-06-09'),('2000-06-10'),('2000-06-11'),
('2000-06-12'),('2000-06-13'),('2000-06-14'),
('2000-06-15'),('2000-06-16'),('2000-06-17')
) t1(birthday)
cross apply (
values (convert(datetime,convert(date,getdate())),datepart(weekday,getdate()))
) t2(curdate,wday)
where
dateadd(year,datediff(year,birthday,curdate),birthday)
between curdate - wday + 1 and curdate + 7 - wday
※ 引述《ken218 (ken218)》之铭言:
: 本身跟 MSSQL 比较熟,所以用 SQL 回,不过我查过,相对应函数 MySQL 都有,上一篇
: 有提过了,所以不赘述。这边针对生日那题回应
: SELECT NAME
: FROM STUDENT
: CROSS JOIN (
: Select Datepart(weekday, GETDATE()) D
: ) X
: WHERE
: DATEADD(year, datediff(year, BIRTHDAY, Getdate()), Birthday)
: Between convert(date, DATEADD(day, -(iif(d=1,8,d)-2),Getdate())
: And dateadd(day,8-(iif(d=1,8,d)), Getdate())
: 本来想要单纯检查 Dayofyear, 但是发现闰年有误差。
: Cross join 单纯是因为当日的 Datepart 不想打四次
: Convert date 因为 Getdate 包含时间,做起始日检查要切掉时间才可以
: ※ 引述《sagwow (不是我)》之铭言:
: : 数据库名称:MySQL
: : 数据库版本:
: : 内容/问题描述:
: : 大家好,小弟这边有两个问题想请教。
: : 第一个问题关于聚合函数,我有一个资料表"成绩",有三个字段 课程 学生 分数,
: : 我想选出每个课程中最高分的人:
: : select 课程, max(分数)
: : from 成绩
: : group by 课程
: : 但这样我只能得到每个课程对应到的最高分,有简便办法得到该分数所对应到的学生吗
: ?
: : 现在我只想得到这种作法:
: : select 学生
: : from 成绩
: : where (课程, 分数) in (select 课程, max(分数) from 成绩 group by 课程)
: : ==========================================================================
: : 第二个问题关于生日,
: : 我有一个资料表"学生资料",里面有学生的生日(年-月-日),
: : 如果要判断学生是否在这周生日要怎么做呢?
: : 如果是判断这个月的话很简单,但不知道怎么去判断生日是否和今天在同一周@@a
: : 以上两个问题麻烦大家帮解了,感恩