Re: [SQL ] 關於聚合函數,和計算週數的兩個問題

作者: cutekid (可愛小孩子)   2019-06-10 21:48:49
修改了幾個地方:
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
: : 以上兩個問題麻煩大家幫解了,感恩
作者: ken218 (ken218)   2019-06-10 23:02:00
Cutekid 大的 where clause 乾淨多了。順帶一提,SQL server Datepart 的 weekday return 原來可以調整,用 set datefirst = X 就可以了

Links booklink

Contact Us: admin [ a t ] ucptt.com